【问题标题】:Webpack HMR for Node.js用于 Node.js 的 Webpack HMR
【发布时间】:2022-02-14 19:54:41
【问题描述】:

我使用webpack 来捆绑我的nodejs 代码。众所周知,我们可以使用webpack-dev-server来为dev搭建环境,那么nodejs呢?我知道nodemon 可以工作,但是它重新启动了整个项目,我想要一个 HMR 方式。

【问题讨论】:

    标签: javascript node.js webpack webpack-hmr


    【解决方案1】:

    你可以按照这个:

    1. 运行npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack
    2. 在应用程序的根目录中创建一个webpack-hmr.config.js 文件并将其放入:
    
    const nodeExternals = require('webpack-node-externals');
    const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin');
    
    module.exports = function (options, webpack) {
      return {
        ...options,
        entry: ['webpack/hot/poll?100', options.entry],
        externals: [
          nodeExternals({
            allowlist: ['webpack/hot/poll?100'],
          }),
        ],
        plugins: [
          ...options.plugins,
          new webpack.HotModuleReplacementPlugin(),
          new webpack.WatchIgnorePlugin({
            paths: [/\.js$/, /\.d\.ts$/],
          }),
          new RunScriptWebpackPlugin({ name: options.output.filename }),
        ],
      };
    };
    
    1. 在您的main.js 内:
    async function bootstrap() {
      <Your Express middleware and etc>
      if (module.hot) {
        module.hot.accept();
        module.hot.dispose(() => server.close());
      }
    }
    

    灵感来自Nest.js HMR

    【讨论】:

    • 您能接受我的回答吗?
    • 感谢您的回答,对我的缓慢回复感到抱歉。这些插件似乎很有趣,我稍后会尝试检查一下。