如何在 Yarn 中使用多个 npm 注册表?

Posted

技术标签:

【中文标题】如何在 Yarn 中使用多个 npm 注册表?【英文标题】:How do I use multiple npm registries in Yarn? 【发布时间】:2017-04-12 06:02:38 【问题描述】:

我正在尝试在我们的环境中设置 Yarn 0.17.9,但我的注册表有问题。我们目前正在使用两个注册中心,官方的 npmjs 和我们自己的内部网络注册中心(Sinopia)。

问题是我们正在使用内部工具通过npm install 使用--registry 标志从其中一个或另一个中提取包。 yarn add 没有 --registry 选项,我无法全局设置自定义注册表并回退到 npmjs。我尝试了.npmrc,但它只为项目中的 npm/yarn 设置了一个注册表。 .yarnrc 似乎不起作用并被.npmrc 静音

有没有办法指定两个注册表(如果在第一个注册表中找不到包,则回退到第二个注册表)?或者为每个包指定不同的 npm 注册表?

【问题讨论】:

【参考方案1】:

Yarn 不支持 --registry 标志作为 npm,但您可以在 .yarnrc 中设置注册表

如果您的 .yarnrc 被忽略,可以使用以下命令将其从 ~/.yarnrc 中复制出来:

yarn config set registry http://registry.com/registry//

【讨论】:

问题是我需要设置两个注册表,一个用于我们的内部服务器,一个用于registry.npmjs.org。我试图列出纱线的配置,注册表设置在我们的内部服务器上,在 npm info 下,注册表是 npmjs.org。但是,当我尝试 yarn add internalpackage 时,纱线尝试 npmjs.org 并失败。 @kraklin 像 Gemfury 这样的托管存储库解决此问题的方法是将私有空间中不存在的所有存储库请求代理到 https://registry.npmjs.org/。你可以做类似的事情 @hamohl 是的,我们在我们的 Sinopia 上进行了尝试,不幸的是,此设置在我们的网络中不起作用,因此我们关闭了代理选项并保留了两个注册表的自定义设置。 @Andres 它支持特定项目的注册表标记。 是的,这就是我在回答中所说的,但它不是标志,使用 npm 作为后备注册表没有帮助。【参考方案2】:

您可以在项目的根目录中创建一个.yarnrc 文件,然后在该文件中写入这一行:

registry "https://registry.npmjs.org/"

这将充当特定于项目的存储库。

【讨论】:

【参考方案3】:

您可以尝试在.npmrc.yarnrc 中设置不同的注册表。

例如: 在.npmrc

registry=https://yourcompany/
virtual/:_authToken=credentials
always-auth=true

always-auth=true 必须是文件的最后一行

.yarnrc:

registry "https://registry.yarnpkg.com"

然后yarn add/npm install + private-pakage/public-packge 将起作用。

【讨论】:

仍然不知道为什么它会通过,但至少这会解决问题。【参考方案4】:

对于 2021 年发现此问题的任何人,请立即使用 yarn can work with scopes, private registries and auth。

例如,我已将 @my-company-private-scope/my-package 等私有包发布到 Verdaccio(Sinopia 的分支)服务器,而我的 .npmrc 配置如下:

; Lines starting with ; are for .npmrc file comments
; yarn 1.22.10 seems to default registry to https://registry.yarnpkg.com
; no matter what I put here /shrug
; registry=https://registry.npmjs.com/

@my-company-private-scope:registry=https://npm.my-company.com/
//npm.my-company.com/:_authToken=TOKEN

; I did not seem to need this, as
; yarn still installed public and private packages successfully
; based on what ended up in my yarn.lock file
; //npm.my-company.com/:always-auth true

看起来像npm also supports scopes,虽然yarn unpublish 不存在,但npm unpublish @my-company-private-scope/my-package@1.0.1-5 也很好用。

我还没有必要在多个私人服务器上尝试多个范围(尽管might),但我也看不出有什么理由不能很好地工作。

【讨论】:

以上是关于如何在 Yarn 中使用多个 npm 注册表?的主要内容,如果未能解决你的问题,请参考以下文章

Yarn 找不到私有的 Github npm 注册表

无法从 GitHub NPM 注册表 (npm.pkg.github.com) 通过 yarn 下载依赖项

使用操作/设置节点时如何更改@yarn:github操作中的注册表

Yarn vs npm: 你需要知道的一切

yarn代替npm yarn的优点与官网

Yarn 包管理器:从私有 Bitbucket 存储库安装依赖项