Nest.js 实战 (十一):配置热重载 HMR 给服务提提速

前言

Nest.js 服务对应用程序的引导过程影响最大的是 TypeScript 编译。每次当我们修改文件时,应用程序都会重新编译整个项目,当应用程序比较庞大时,项目编译会越来越慢,会有很明显的效率低下问题。

那这个问题该怎么解决呢?使用 webpack HMR(Hot-Module Replacement) 能很大程度上降低应用实例化所用的时间。

具体教程

  1. 安装所需的依赖包
powershell 复制代码
pnpm add webpack-node-externals run-script-webpack-plugin webpack -D
  1. 根目录下新增 webpack 配置文件 webpack-hmr.config.js
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. 为了启用 HMR,打开应用程序入口文件( main.ts )并添加一些与 webpack 相关的说明
ts 复制代码
declare const module: any;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);

  if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }
}
bootstrap();
  1. 修改 package.json 脚本命令
json 复制代码
"start:dev": "nest build --webpack --webpackPath webpack-hmr.config.js --watch"

总结

如果您想要更高级的配置,比如自定义 webpack 配置来更好地控制HMR的行为,您可以在 webpack-hmr.config.js 文件中进行调整。这个文件位于项目的根目录下,并且包含了一些默认的 webpack 配置选项。您可以在其中添加或修改 HMR 相关的配置。

相关推荐
weixin_431600442 天前
NestJS 入门(10):日志——为什么常用 Winston?
后端·学习·日志·nest.js·winston
weixin_431600442 天前
NestJS 入门(9):连上数据库,SQL 写在哪?
数据库·后端·sql·学习·nest.js
weixin_431600443 天前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
cyadyx4 天前
Vite 比 Webpack 构建效率更高
前端·webpack·node.js·vite
EXI-小洲4 天前
Web Spider 某渣渣企业平台 表单参数逆向 Webpack
python·webpack·js逆向·spider
weixin_431600447 天前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
weixin_431600448 天前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
一壶浊酒..8 天前
Scrape Webpack练习
开发语言·javascript·webpack
weixin_431600449 天前
NestJS 入门(1):先搞懂 Module、Controller、Service
开发语言·前端·后端·nest.js
lvv9 天前
不会被渲染的组件,为什么让我的首屏白屏了?(一次前端问题总结)
前端·webpack·性能优化