关于npm publish发包

无论是发布JS包到私有/公有源,都会走npm publish命令进行发布,但之前并注意到publish时针对lock文件处理,又比如resolutions字段处理等。这里将我所了解的问题点整理下。

发布包不包含package-lock.json

  1. 开发JS包,源码管理时我们需要将package-lock.json纳入VSC管理,但publish时lock文件是不会被publish。
  2. 在具体项目中当我们执行npm install命令,顶级包也即目标项目的lock文件会被识别进行具体版本的安装,但依赖的包中所包含的lock文件是会被直接忽视的。

发布包中包含lock文件?

  • npm-cli >=v6情况下,无论package.json-files白名单中是否配置package-lock.json,都不会被发布。但老版CLI下,通过白名单配置是可以发布的。
  • 实测v6即会出现该问题。通过官方版本历史查询可以看到比如安装nodev8默认npm cli为v6,尝试该版本即可复现该问题。

https://static.1991421.cn/2022/2022-09-24-235551.jpeg

preinstall执行resolutions不行

有时为了控制间接依赖的包版本会用到resolutions,同时配置到preinstall钩子下进行执行,但如上所说发布的包不包含lock文件,因此该钩子也需要删除,否则实际项目中npm install会包找不到lock文件错误。

1
2
3
"scripts": {
"preinstall": "npx npm-force-resolutions"
}

npm pack提取打包

有时想提取打出的npm包,可以在项目下执行npm pack即可。如果是想直接具体项目下调试开发包使用npm link

https://static.1991421.cn/2022/2022-09-24-170314.jpg