node.js – 我可以使用webpack的热模块重新加载sailsjs吗?

我正在使用 sails.jsreact开发一个项目.我希望能够使用Webpack的 hot module replacement,这样我就可以编辑我的代码并立即在浏览器上进行更改.但是,我怎么能把它连接起来似乎并不明显.

我希望能够使用$sails lift并让它完全正常工作.

如果这是一个node.js项目,我只需配置webpack以使用react-transform-hmr并从package.json启动webpack-dev-server(例如as described here).但是,这似乎不是一个非常风帆的东西.

我看到模块webpack-hot-middleware声称能够“在没有webpack-dev-server的情况下将热重新加载到现有服务器中”.但是,我不确定在Sails> 0.10中添加Express中间件配置的适当位置.

任何人都可以推荐一个好的方法来设置它吗?

解决方法

好吧,经过一些好的方法后,看起来是使用sails的http中间件配置的旧的customMiddleware选项,但仅限于保存在config / env / development.js中的开发环境.

1)安装反应和反应(如果你还没有):

$npm install react react-dom --save

2)安装webpack,热模块重装(& ES6)支持帆:

$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)安装反应变换和中间件以进行热模块重新加载:

$npm install babel-plugin-react-transform
  react-transform-catch-errors react-transform-hmr \
  webpack-dev-middleware webpack-hot-middleware --save-dev

4)禁用通常链接应用程序的内置grunt钩子:

// .sailsrc 
{
  "hooks": {
    "grunt": false
  }
}

5)配置sails 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)配置项目范围的.babelrc以在开发模式下使用热模块重新加载:

{
  "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)最后,将http.customMiddleware配置添加到sails的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 }
      ));
    },}

  /* ... */
};

假设您在assets / js / index.jsx(或类似)中有一个react应用程序,并且包含您的bundle.js文件的视图,您应该能够简单地获得$sails提升,并在您的浏览器开发控制台上查看以下内容

|>    Now connected to Sails.
\___/   For help,see: http://bit.ly/1DmTvgK
        (using browser SDK @v0.11.0)



client.js:51 [HMR] connected

繁荣你应该做生意!

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...