关于npm publish发包
无论是发布JS包到私有/公有源,都会走npm publish命令进行发布,但之前并注意到publish时针对lock文件处理,又比如resolutions字段处理等。这里将我所了解的问题点整理下。
发布包不包含package-lock.json
- 开发JS包,源码管理时我们需要将package-lock.json纳入VSC管理,但publish时lock文件是不会被publish。
- 在具体项目中当我们执行npm install命令,顶级包也即目标项目的lock文件会被识别进行具体版本的安装,但依赖的包中所包含的lock文件是会被直接忽视的。
发布包中包含lock文件?
- npm-cli >=v6情况下,无论package.json-files白名单中是否配置package-lock.json,都不会被发布。但老版CLI下,通过白名单配置是可以发布的。
- 实测v6即会出现该问题。通过官方版本历史查询可以看到比如安装nodev8默认npm cli为v6,尝试该版本即可复现该问题。
preinstall执行resolutions不行
有时为了控制间接依赖的包版本会用到resolutions,同时配置到preinstall钩子下进行执行,但如上所说发布的包不包含lock文件,因此该钩子也需要删除,否则实际项目中npm install
会包找不到lock文件错误。
1 | "scripts": { |
npm pack提取打包
有时想提取打出的npm包,可以在项目下执行npm pack
即可。如果是想直接具体项目下调试开发包使用npm link