You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nest.js默认打包体积过大,如何减小应用打包体积?

解决NestJS执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:05:41