Cli: [BUG]即使软件包中没有`main`,`npm pack`也会成功完成

创建于 2020-05-15  ·  3评论  ·  资料来源: npm/cli

什么为什么

当我们公司的一个内部软件包进行一些重构并将入口点移动到存储库中的其他位置而又不记得要更新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中不包含mainpackage.json从发布到注册表。

我们公司在尝试发布到我们的内部注册表时遇到了这种情况。

参考

  • 不适用

最有用的评论

听起来很合理。 无论出于何种原因,我的公司都使用npm pack作为测试来查看发布是否成功完成。 npm publish --dry-run可能是更好的选择。

所有3条评论

我不确定这是否更适合作为npm-packlist 。 我不确定npm组织如何希望将关注点分离。 即npm-packlist只是盲目地返回一个文件列表,这些文件应在不进行任何验证的情况下尝试包含在其中,并在需要使用npm-packlist功能的任何程序包中进行更高级别的验证?

这不是npm-packlist的工作,它是npm publish的工作(如果有的话)。

听起来很合理。 无论出于何种原因,我的公司都使用npm pack作为测试来查看发布是否成功完成。 npm publish --dry-run可能是更好的选择。

此页面是否有帮助?
0 / 5 - 0 等级