如何让NestJS监听特定Node模块并在开发模式下自动重载?
让NestJS开发模式监听私有包变更并自动重载
要实现当node_modules/@blabla/common变更时自动重新编译并重载,需要修改webpack配置,让webpack监听该私有包的文件变化,同时调整外部依赖处理逻辑。以下是具体修改步骤:
1. 调整nodeExternals的允许列表
默认nodeExternals会排除所有node_modules包,导致webpack不监听它们的变化。需要将@blabla/common加入allowlist,让webpack将其纳入打包流程:
修改webpack.config.js中的externals部分:
externals: [ nodeExternals({ allowlist: ['webpack/hot/poll?100', /^@blabla\/common/], }), ],
2. 配置webpack监听规则
添加watchOptions,让webpack仅忽略除@blabla/common外的其他node_modules文件,确保该私有包的变更能被捕捉:
在configuration对象中新增watchOptions:
const configuration = (options, webpack) => ({ ...options, entry: ['webpack/hot/poll?100', options.entry], // 新增watchOptions watchOptions: { ignored: /node_modules\/(?!@blabla\/common)/, }, externals: [ // ... 已修改的externals配置 ], plugins: [ // ... 插件配置 ], });
3. 开启自动重启(可选但推荐)
依赖包的变更通常需要重启服务才能完全生效,将RunScriptWebpackPlugin的autoRestart设为true:
修改插件配置:
new RunScriptWebpackPlugin({ name: options.output.filename, autoRestart: true }),
4. 确保私有包的本地关联(开发场景)
如果@blabla/common是本地开发的私有包,需通过npm link或yarn link将其软链接到当前项目,这样本地修改的文件变化才能被webpack实时监听。
完成以上修改后,运行nest build --watch,当@blabla/common的文件发生变更时,webpack会自动重新编译并重启NestJS服务。
内容的提问来源于stack exchange,提问作者Tal Rofe
相关产品推荐
相关产品推荐

