Node.js 的 Webpack HMR
Webpack HMR for Node.js
我使用 webpack
来捆绑我的 nodejs 代码。众所周知,我们可以用webpack-dev-server
搭建开发环境,那么nodejs呢?我知道 nodemon
可以工作,但它会重新启动整个项目,我想要一个 HMR 方式。
你可以关注这个:
- 运行
npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack
- 在您的应用程序的根目录中创建一个
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 }),
],
};
};
- 在你的
main.js
里面:
async function bootstrap() {
<Your Express middleware and etc>
if (module.hot) {
module.hot.accept();
module.hot.dispose(() => server.close());
}
}
灵感来自 Nest.js HMR
我使用 webpack
来捆绑我的 nodejs 代码。众所周知,我们可以用webpack-dev-server
搭建开发环境,那么nodejs呢?我知道 nodemon
可以工作,但它会重新启动整个项目,我想要一个 HMR 方式。
你可以关注这个:
- 运行
npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack
- 在您的应用程序的根目录中创建一个
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 }),
],
};
};
- 在你的
main.js
里面:
async function bootstrap() {
<Your Express middleware and etc>
if (module.hot) {
module.hot.accept();
module.hot.dispose(() => server.close());
}
}
灵感来自 Nest.js HMR