当我们公司的一个内部软件包进行一些重构并将入口点移动到存储库中的其他位置而又不记得要更新package.json中的main
时,我们发现了这一点。 最终结果是愉快地创建了npm pack
并允许发布没有机会正常工作的程序包。
当npm pack
并因此在运行npm publish
npm pack
不能验证main
存在于压缩包中,这使得创建和发布无法被消费者使用的软件包变得有些容易。
npm init
并逐步创建具有默认值的所有内容。 您将获得像这样的package.json
{
"name": "npm-repro",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm pack
,观察一下tarball的创建是愉快的npm notice
npm notice 📦 [email protected]
npm notice === Tarball Contents ===
npm notice 205B package.json
npm notice === Tarball Details ===
npm notice name: npm-repro
npm notice version: 1.0.0
npm notice filename: npm-repro-1.0.0.tgz
npm notice package size: 241 B
npm notice unpacked size: 205 B
npm notice shasum: ca39bc17447e27ef2fd0dea656e0e6b473f310d7
npm notice integrity: sha512-p8tZD8W438r7t[...]7Oo0YMcAoNPzQ==
npm notice total files: 1
npm notice
npm-repro-1.0.0.tgz
没有index.js
,因此,如果尝试使用此软件包,它将无法正常工作。
npm pack
会以非零的退出代码退出,这也将导致npm publish
失败并阻止其tarball中不包含main
从package.json
从发布到注册表。我们公司在尝试发布到我们的内部注册表时遇到了这种情况。
我不确定这是否更适合作为npm-packlist
。 我不确定npm
组织如何希望将关注点分离。 即npm-packlist
只是盲目地返回一个文件列表,这些文件应在不进行任何验证的情况下尝试包含在其中,并在需要使用npm-packlist
功能的任何程序包中进行更高级别的验证?
这不是npm-packlist的工作,它是npm publish
的工作(如果有的话)。
听起来很合理。 无论出于何种原因,我的公司都使用npm pack
作为测试来查看发布是否成功完成。 npm publish --dry-run
可能是更好的选择。
最有用的评论
听起来很合理。 无论出于何种原因,我的公司都使用
npm pack
作为测试来查看发布是否成功完成。npm publish --dry-run
可能是更好的选择。