摘要两台 Windows 电脑、同一项目、Node 版本一致打包体积差一倍根本原因几乎都不是 Node 版本而是依赖不一致、打包缓存 / 产物残留、系统与工具链差异、原生模块 / 平台文件被多打包、配置 / 环境变量不同。下面按最常见到最隐蔽的顺序排查一、依赖没真的一致最常见即使 package.json 一样、Node 一样node_modules 内容可以完全不一样。1、lock 文件不同一台有 package-lock.json/yarn.lock另一台没有或内容不同结果版本范围如 ^1.2.0会装到不同小版本甚至跨大版本体积差很多验证# 两台都执行gitstatuscatpackage-lock.json2、缓存导致依赖版本不一致npm/yarn 缓存旧版本npm install 时优先用缓存导致同一份 package.json 装出不同版本验证npmls某个大体积包名3、原生模块.node/.dll平台差异有些包如 sharp、onnxruntime-node、canvas会带 win32/x64/ia32 多平台二进制一台是 32 位系统或打包成 32 位另一台 64 位或一台把所有平台文件都打进去典型onnxruntime-node 全平台 250MB只留 win32 可缩到 30MB二、打包缓存 / 旧产物没清非常常见打包工具Webpack/Vite/ESBuild/Parcel都会缓存旧文件残留会让体积翻倍。1、输出目录没清空一台每次打包前清 dist/build另一台不清旧文件累积验证# 两台都看输出目录dirdist2、构建缓存没禁用 / 没清理Webpacknode_modules/.cache、webpack.cacheVitenode_modules/.vite一台开缓存、一台关或一台缓存脏了验证rm-rfnode_modules/.cache distnpmrun build三、系统与工具链细节差异易忽略都是 Windows但版本、位数、工具链、环境变量不同影响打包行为。1、Windows 位数不同一台 Win10 x64一台 Win10 x862、32 位打包会带入 32 位 DLL且部分依赖体积更大npm/yarn 版本不同Node 版本一样但 npm 版本不同如 npm 8 vs npm 10安装依赖策略、树结构、去重逻辑不同导致 node_modules 大小差异3、环境变量影响关键但隐蔽PATH 不同打包工具如 pkg、nexe会从 PATH 找系统 DLLvcruntime、ucrt 等一台从系统目录找一台从旧 SDK/MinGW 找导致重复打包或多版本共存验证echo%PATH%四、打包配置 / 模式不一致易排查1、环境变量 NODE_ENV 不同一台 production压缩、tree-shaking一台 development不压缩、保留注释、sourcemap体积差一倍很常见验证echo%NODE_ENV%2、打包工具配置差异vue.config.js/webpack.config.js是否开启 splitChunks、treeShaking、minimizesourcemap一台生成.map 文件很大一台不生成五、快速复现与对比步骤直接照做两台电脑严格对齐统一 Node 版本如 18.17.0、npm 版本如 9.6.7同步代码gitpullgitclean-fd清理依赖与缓存rm-rfnode_modules package-lock.jsonnpmcache clean--forcenpminstall打包前清空输出rm-rfdistsetNODE_ENVproductionnpmrun build对比看 dist 总大小看打包日志哪几个 chunk 体积大用 webpack-bundle-analyzer 分析依赖构成六、最可能的结论90% 情况一台是 development 打包带 sourcemap、不压缩一台是 production或依赖 lock文件不一致10% 情况原生模块多平台文件被打包、PATH 导致系统 DLL 重复、缓存残留