npm发布给出"未编译的包不能私有"

mb2*_*b21 52 npm

我想将一个普通的公共包发布到npm.当我这样做时,npm publish我得到:

npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! unscoped packages cannot be private : my-package
Run Code Online (Sandbox Code Playgroud)

mb2*_*b21 76

看来(截至2018年11月),您必须这样做:

npm publish --access public
Run Code Online (Sandbox Code Playgroud)

这告诉npm注册表您希望每个人都可以下载您的包.这曾经是默认的,从文档仍然应该是,所以这可能只是npm中的一个错误.关于作用域/未作用域和公共/私有包的文档还有一些不太好的文档.

--access您可以将设置添加到您的设置中,而不是使用,package.json如下面@ smnbbrv的答案中所示.但是,如果我是对的,这只是一个错误,您可能只想--access用作临时解决方法.

  • 感谢npm团队提供明确的消息,需要单独的SO问题/答案.令人难以置信,这是一个非常重大的变化,错误信息是随机文字说... (5认同)
  • 是!谢谢你的团队.最后,没有更多的冷汗,我会意外地在错误的终端... (2认同)

smn*_*brv 6

有了@ mb21和他的解决方案的所有学分,他的答案还有一点点补充.

提议

npm publish --access public
Run Code Online (Sandbox Code Playgroud)

工作得很好.但是,并不总是能够使其在CI环境中工作,例如,当您使用语义释放时.正确的解决方案是使用相同的access参数,但在你package.json的内部publishConfig(顺便说一下,这也使得以后手动发布更容易):

{
  "name": "...",
  ...
  "publishConfig": {
    "access": "public"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以在CI工具中使用它或简单地使用它

npm publish
Run Code Online (Sandbox Code Playgroud)

我花了一些时间来解决这个问题,所以我希望它为未来的读者节省一些时间.