【问题标题】:How do I publish private modules using the new npm feature?如何使用新的 npm 功能发布私有模块?
【发布时间】:2018-08-23 21:06:12
【问题描述】:

输入账单信息并重新登录我的 npm 客户端后,我尝试发布一个新的私有模块。

我在package.json 上设置了"private": "true",并使用@myusername/mymodule 之类的范围来命名。然后我在npm publish 上收到一条错误消息,说我必须删除"private": "true" 才能发布我的模块!我做错了什么?

我是否应该删除私有属性并相信我给它一个范围名称这一简单事实会使其默认成为私有?

信息:npm v2.7.6

【问题讨论】:

    标签: npm package.json


    【解决方案1】:

    "private": true 与私有包完全不同。来自docs.npmjs.com

    如果你在你的 package.json 中设置了"private": true,那么 npm 将拒绝发布它。这是一种防止意外发布的方法……

    我认为这不是你要找的。​​p>

    npm@2.7.0开始,如果你是paid user,你可以将private packages发布到npm注册中心。

    1. 注册一个付费帐户。
    2. 使用范围名称创建和初始化包,例如"name": "@username/module-name"
    3. 发布您的包。默认情况下,npm 假定作用域包是私有的——这就是你想要的。但是,如果您希望您的作用域包是公开的,您可以使用 --access=public 选项发布。

    【讨论】:

    • 是否可以在没有付费帐户的情况下在私有注册表上发布私有包?
    • @Fractaliste 截至 2020 年:只能私下发布用户范围或组织范围的包。 (非范围的包必须是公开的。)要私下发布用户范围的包,您必须在 NPM 上有一个付费帐户。它没有明确说明,但我推断您可以免费私下发布 org 范围的软件包,但前提是您是该组织的成员。阅读Contributing packages to the registry 上的文档了解更多信息。请注意,这仅适用于 NPM 注册表。我不能代表其他注册机构。
    【解决方案2】:

    我是否应该删除私有属性并相信我给它一个范围名称这一简单事实会使其默认成为私有?

    根据this page,看起来你应该安全地这样做!

    具体来说:

    所有作用域包默认为受限访问。这样可以确保您不会意外公开某些内容。您可以在访问页面上更改此设置。

    【讨论】:

    • 我试过这样做,但即使它说没有名称为 @user/foo 的软件包,当我没有使用我的帐户登录时,我也能够安装它!将进行更多测试并通知您
    • 您是如何注销的?我猜一旦你运行了npm login,你实际上已经修改了你的~/.npmrc,你需要修改它来模拟尝试为未经身份验证的用户访问私有模块的感觉。查看常见问题解答的Logging In 部分。
    猜你喜欢
    • 2013-02-09
    • 2017-08-11
    • 1970-01-01
    • 2017-12-29
    • 2015-08-08
    • 2022-11-02
    • 2015-08-23
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多