【发布时间】:2017-03-24 19:12:46
【问题描述】:
NPM 最近为模块引入了@scopes / organizations。有没有将现有模块迁移到组织的好方法?是否有任何工具可以为大量包自动化它? NPM 是否支持重定向,以便其他软件仍然可以使用旧名称,但会收到应该更新的通知?
【问题讨论】:
NPM 最近为模块引入了@scopes / organizations。有没有将现有模块迁移到组织的好方法?是否有任何工具可以为大量包自动化它? NPM 是否支持重定向,以便其他软件仍然可以使用旧名称,但会收到应该更新的通知?
【问题讨论】:
您可以从以下位置更改您的 package.json:
"name": "project-name"
到:
"name": "@scope/project-name"
并发布包:
npm publish --access=public
更新: 需要 --access=public 参数才能使作用域包公开 - 否则默认情况下它将是私有的。您可以在package.json 的publishConfig 部分中将access 设置为"public",而不是命令行参数:
"publishConfig": {
"access": "public"
}
(感谢 Danilo Bargen 和 Greg Pratt 在 cmets 中指出!)
见:https://docs.npmjs.com/getting-started/scoped-packages
npm 不支持从旧名称重定向到新名称,但是 您可以通过以下方式弃用旧包:
npm deprecate <pkg>[@<version>] <message>
这样安装旧版本的人会被通知他们应该安装另一个包。
【讨论】:
--access=public 参数。
"publishConfig": { "access": "public" },,否则默认发布为private
另一种不涉及重命名包的方法是转到 npm 网站上您组织中的团队设置(有一个名为“开发人员”的默认团队)。那里有一个按钮可以将现有包添加到团队。
通过这种方式,您实际上是转移包,而不是以不同的名称重新发布它。
【讨论】:
可以通过以下命令授予 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。
具有访问权限的团队中的用户在被删除后仍然可以访问包。
【讨论】: