【问题标题】:How to migrate NPM package to an organization @scope如何将 NPM 包迁移到组织 @scope
【发布时间】:2017-03-24 19:12:46
【问题描述】:

NPM 最近为模块引入了@scopes / organizations。有没有将现有模块迁移到组织的好方法?是否有任何工具可以为大量包自动化它? NPM 是否支持重定向,以便其他软件仍然可以使用旧名称,但会收到应该更新的通知?

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    您可以从以下位置更改您的 package.json:

    "name": "project-name"
    

    到:

    "name": "@scope/project-name"
    

    并发布包:

    npm publish --access=public
    

    更新: 需要 --access=public 参数才能使作用域包公开 - 否则默认情况下它将是私有的。您可以在package.jsonpublishConfig 部分中将access 设置为"public",而不是命令行参数:

    "publishConfig": {
      "access": "public"
    }
    

    (感谢 Danilo BargenGreg Pratt 在 cmets 中指出!)

    见:https://docs.npmjs.com/getting-started/scoped-packages

    npm 不支持从旧名称重定向到新名称,但是 您可以通过以下方式弃用旧包:

    npm deprecate <pkg>[@<version>] <message>
    

    这样安装旧版本的人会被通知他们应该安装另一个包。

    见:https://docs.npmjs.com/cli/deprecate

    【讨论】:

    • 发布命令可能应该包含--access=public 参数。
    • 或者在package.json中添加"publishConfig": { "access": "public" },,否则默认发布为private
    • @DaniloBargen 很好,感谢您指出!我将其添加到答案中。
    【解决方案2】:

    另一种不涉及重命名包的方法是转到 npm 网站上您组织中的团队设置(有一个名为“开发人员”的默认团队)。那里有一个按钮可以将现有包添加到团队。

    通过这种方式,您实际上是转移包,而不是以不同的名称重新发布它。

    【讨论】:

    • 为什么这对成员发布但没有范围的包不起作用。当我尝试将包添加到开发人员团队时,Npm 以“禁止”响应。
    • 但这不会重定向到该软件包的所有当前用户,还是会这样?
    • 我刚试过这个。它不会将包转移到组织,它只是允许组织中的人员发布对原始包的更改。
    【解决方案3】:

    可以通过以下命令授予 NPM 组织中的团队访问权限:

    npm access grant <read-only|read-write> <org:team> [<package>]
    

    见“Adding package access to a team using the CLI”。

    另外,还有一种方法可以通过 Web UI 执行此操作。见“Adding package access to a team on the web”。

    这两种方式似乎都需要管理员权限。

    在授予组织团队权限后,可以删除单个用户的包访问权限。

    这可以通过 CLI 完成:

    npm owner rm <your-username> <package-name>
    

    见“npm-owner”。

    或通过包设置访问 Web UI。

    具有访问权限的团队中的用户在被删除后仍然可以访问包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多