Nest.js默认打包体积过大,如何减小应用打包体积?
nest build后打包体积过大的问题 确认生产模式构建:必须用
production模式构建,NestJS在该模式下会自动启用Tree Shaking和代码压缩。可以直接执行nest build --mode=production,或者修改nest-cli.json的compilerOptions:"compilerOptions": { "mode": "production" }配置Webpack外部依赖:把无需打包的核心第三方依赖(比如
express、reflect-metadata)设为外部依赖,让应用运行时直接从node_modules加载,不打包进产物。在nest-cli.json中添加Webpack配置:"compilerOptions": { "webpack": { "externals": { "express": "commonjs express", "reflect-metadata": "commonjs reflect-metadata" } } }强制开启代码压缩:在
nest-cli.json中开启minify选项,确保Webpack的TerserPlugin生效压缩代码:"compilerOptions": { "minify": true }同时保证项目代码用ES模块语法(
import/export),别用CommonJS的require,否则Tree Shaking无法正常工作。分析打包体积定位问题:安装
webpack-bundle-analyzer插件可视化查看产物组成,找到体积过大的依赖:npm install webpack-bundle-analyzer --save-dev然后在
nest-cli.json的Webpack配置中引入插件:"compilerOptions": { "webpack": (config) => { const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; config.plugins.push(new BundleAnalyzerPlugin()); return config; } }执行
nest build后会自动打开可视化页面,直观看到哪些包占空间。按需导入第三方库:别直接导入整个库,比如用
lodash-es替代lodash,只导入需要的方法:// 不推荐 import _ from 'lodash'; // 推荐 import { debounce } from 'lodash-es';排查配置排除冗余目录:检查
nest-cli.json的compilerOptions里的include字段,确保没把node_modules加进去——正常情况下NestJS不会默认打包整个node_modules,如果出现该问题,大概率是自定义配置导致路径错误。
内容的提问来源于stack exchange,提问作者Nechar Joshi

