Ok, po jakimś noodling wokół dobrym podejściem wydaje się być używać starego customMiddleware
opcję http
konfiguracji middleware żagle, ale tylko dla środowiska rozwój przechowywane w config/env/development.js
.
1) Instalacja reagować i reagować-DOM (jeśli jeszcze go nie masz):
$ npm install react react-dom --save
2) Instalowanie WebPACK, gorący moduł przeładunkowych (& ES6) wsparcie dla żagli:
$ npm install sails-webpack babel-core babel-loader \
babel-plugin-syntax-class-properties babel-plugin-syntax-decorators \
babel-plugin-syntax-object-rest-spread \
babel-plugin-transform-class-properties \
babel-plugin-transform-decorators-legacy \
babel-plugin-transform-object-rest-spread \
babel-preset-es2015 babel-preset-react \
copy-webpack-plugin file-loader --save
3) zainstalować reakcji przekształca i pośredniczące w gorącym modułu przeładunku:
$ npm install babel-plugin-react-transform
react-transform-catch-errors react-transform-hmr \
webpack-dev-middleware webpack-hot-middleware --save-dev
4) Di sable wbudowany hak grunt które normalnie połączyć swoją aplikację:
// .sailsrc
{
"hooks": {
"grunt": false
}
}
5) Konfiguracja żagle konfigurację WebPACK:
// config/webpack.js
var webpack = require('webpack');
var CopyWebpackPlugin = require('copy-webpack-plugin');
var path = require('path');
// compile js assets into a single bundle file
module.exports.webpack = {
options: {
context: path.join(__dirname, '..'),
devtool: 'eval',
entry: [
'./assets/js',
'webpack-hot-middleware/client'
],
output: {
path: path.resolve(__dirname, '../.tmp/public'),
publicPath: "/",
filename: 'bundle.js'
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
/* Copy sails.io.js unmolested: */
new CopyWebpackPlugin([
{
from: 'assets/js/dependencies',
to: 'dependencies',
force: true
}
]),
],
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /(bower_components|node_modules)/,
loader: 'babel',
},
{ test: /\.css$/, loader: 'style!css' },
{
test: /\.jpe?g$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$|\.wav$|\.mp3$/,
loader: "file" }
]
}
},
// docs: https://webpack.github.io/docs/node.js-api.html#compiler
watchOptions: {
aggregateTimeout: 300
}
};
6) Konfiguracja całego projektu .babelrc
użyć modułu ciepłej reload w trybie rozwoju :
{
"presets": [
"es2015",
"react",
],
"plugins": [
"syntax-class-properties",
"syntax-decorators",
"syntax-object-rest-spread",
"transform-class-properties",
"transform-decorators-legacy",
"transform-object-rest-spread"
],
"env": {
"development": {
"plugins": [["react-transform", {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
}]]
}
}
}
7) na koniec dodać http.customMiddleware
konfigurację żagle na config/env/development.js
:
module.exports = {
/* ... */
/*
* Enable webpack hotloading while in development mode:
*/
http: {
customMiddleware: function (app) {
var webpack = require('webpack');
var webpackConfig = require('../webpack').webpack.options;
var compiler = webpack(webpackConfig);
app.use(require("webpack-dev-middleware")(compiler,
{
noInfo: true,
publicPath: webpackConfig.output.publicPath
}
));
app.use(require("webpack-hot-middleware")(compiler,
{ reload: true }
));
},
}
/* ... */
};
Zakładając masz aplikację reagowania w assets/js/index.jsx
(lub podobny) i widok, który zawiera plik bundle.js
powinieneś być w stanie po prostu $ sails lift
i zobacz, co następuje na konsoli rozwój Twojego Brower za:
|> Now connected to Sails.
\___/ For help, see: http://bit.ly/1DmTvgK
(using browser SDK @v0.11.0)
client.js:51 [HMR] connected
I wysięgnik powinieneś być w biznesie!
Jestem autorem żagli-webpack. Należy pamiętać, że kończy się obsługa tego modułu: https://github.com/balderdash-projects/sails-webpack/issues/2 –
Należy również pamiętać, że instrukcje dotyczące pakietu żagli-plecaka wskazują na całkowite wyłączenie haka. Jeśli pójdziesz z pakietem-żaglami, być może będziesz musiał znaleźć inny sposób wykonania tego, co haczyk dostarczony przez domyślne zadania (wszystkie potoki zasobów takie jak czyste, kłopotliwe, kopiowanie, itp.). Obecnie gram z dodaniem pakietu "trzęsienie ziemi" do gotowego zestawu (jeszcze go nie mam). Może pakiet internetowy zawiera wszystko - jeszcze się z tym nie zapoznałem. – jinglesthula
Wygląda dobrze, działa! Ale jaki kod powinien dodać do kompilacji rysika do css? Dzięki! – SoldierCorp