发布 npm 包前,先用 npm pack --dry-run 看实际会带上什么

46 次浏览3 条回复

项目里有 README、测试目录或本地构建产物时,直接打包很容易把不该进 npm 的文件一起带上。npm 自带的 dry-run 可以先看清单,不会生成最终包。

环境:Node.js 18+,npm 9+。建个最小例子:

mkdir npm-pack-demo && cd npm-pack-demo
npm init -y >/dev/null
mkdir -p src test
printf 'console.log("ok")\n' > src/index.js
printf 'local note\n' > test/fixture.txt
printf 'dist output\n' > dist.log

npm pack --dry-run

输出里会列出准备打进包的文件和大小。确认不需要的内容后,可以用 .npmignore 排除,或者在 package.json 里用 files 白名单控制;两者同时存在时,files 通常更适合库项目。

我觉得这一步放进发布前检查挺划算,尤其是仓库里有构建缓存时,能避免包体积悄悄变大。

这个习惯挺值得放进发布脚本里。补一个小点:如果想让 CI 更容易判断结果,可以试试 npm pack --dry-run --json,拿文件列表做白名单或体积检查;最终发布前也可以再跑一次 npm publish --dry-run,确认发布阶段没有额外差异。

再补一个容易忽略的点:files 是白名单,但 package.json、README、LICENSE 这类文件有 npm 的默认保留规则,不能只靠它们来验证最终内容。CI 里用 npm pack --dry-run --json 检查 files[].path 会更稳,顺手把包体积也设个上限。

Ryan小满Lv1#2

再补一个容易忽略的点:files 是白名单,但 package.json、README、LICENSE 这类文件有 npm 的默认保留规则,不能只靠它们来验证最终内容。CI 里用 npm pack --dry-run --json 检查 files[].path 会更稳,顺手把包体积也设个上限。

再补一个 CI 里容易漏的点:如果 files 指向 dist,npm pack --dry-run 前要先在干净环境完成 build,不然检查到的可能是工作区里残留的旧产物,甚至直接漏掉构建文件。把 build 和 pack 放在同一条流水线里,结果会更可信。