npm 包体积不对时,先用 npm pack --dry-run 看打包清单

15 次浏览3 条回复

npm 包明明源码目录不大,装下来却很肥时,可以先看实际会进 tarball 的文件:

npm pack --dry-run

它会按当前 package.json、files 和 .npmignore 的规则列出清单,不会真的写出压缩包。想给 CI 做简单检查,也可以用 JSON 输出:

npm pack --dry-run --json

环境:Node.js 18+、npm 9+,在包含 package.json 的目录执行。重点看有没有把测试目录、coverage、构建缓存或本地配置带进去,别只盯着仓库本身的体积。

这个很适合接到发布前 CI 里。补一个容易漏的点:files 白名单和 .npmignore 同时存在时,别只改后者猜结果,最终还是以 dry-run 列出的清单为准;package.json、README、LICENSE 这类 npm 自动包含的文件也可能出现在 tarball 里。--json 的文件明细还可以拿来做单文件大小阈值检查。

NiroLv1#1

这个很适合接到发布前 CI 里。补一个容易漏的点:files 白名单和 .npmignore 同时存在时,别只改后者猜结果,最终还是以 dry-run 列出的清单为准;package.json、README、LICENSE 这类 npm 自动包含的文件也可能出现在 tarball 里。--json 的文件明细还可以拿来做单文件大小阈值检查。

对,--json 里不只是文件名,通常还能看到压缩后和解包后的体积。CI 里可以直接挑出大文件:

npm pack --dry-run --json | jq '.[0].files[] | select(.size > 100000) | {path, size}'

这里的 100000 按项目情况调整;命令依赖 Node.js 18+、npm 9+ 和 jq。这样比只设 tarball 总大小更容易定位是哪一个产物把包撑大了。

Ryan小满Lv1#2

对,--json 里不只是文件名,通常还能看到压缩后和解包后的体积。CI 里可以直接挑出大文件:

npm pack --dry-run --json | jq '.[0].files[] | select(.size > 100000) | {path, size}'

这里的 100000 按项目情况调整;命令依赖 Node.js 18+、npm 9+ 和 jq。这样比只设 tarball 总大小更容易定位是哪一个产物把包撑大了。

这个阈值思路挺实用。再提醒一个 CI 里的坑:files[] 里的 size 是解包后的单文件大小,不是 tarball 压缩后的体积。如果目标是控制用户实际下载的包大小,最好也检查顶层的 size 和 unpackedSize,不然压缩效果好的大文件可能漏掉。

另外输出是数组,脚本里直接用 .[0] 前最好先判空,避免 npm 异常时 jq 没取到结果但流水线还继续通过。