有没有办法在单个npmrc文件中配置多个注册表

Abh*_*der 106 node.js npm

这是我的问题.我们有一个私有的NPM注册表,只能在VPN中使用.我想有一个后备注册表https://registry.npmjs.org,这样当我离开VPN时,它可以无缝地工作.

PS目前我正在使用npmrc,它可以很好地切换.npmrc文件作为解决方法

小智 147

您可以在文件中为范围包提供多个注册表.npmrc.例如:

@polymer:registry=<url register A>
registry=http://localhost:4873/
Run Code Online (Sandbox Code Playgroud)

@polymer范围内的包将从https://registry.npmjs.org收到,但其余的将从您当地的NPM收到.

  • 谢谢你的建议.您能告诉我,是否可以向这些作用域注册表添加身份验证?因为我需要_auth密钥到我的主注册表. (12认同)
  • @jcollum,范围包只是通过命名空间分组(或范围)的包。有关详细信息,请参阅 https://docs.npmjs.com/misc/scope。范围可用于关联多个包(如@angular),这使得很容易知道包(@angular/core)是 Angular 的一部分,但也可以是像 @mycompany/mypackage 这样的公司。 (3认同)
  • 没有作用域包,这可能吗?假设我们要查找的是特定软件包,请转到该注册表,否则请转到该注册表 (3认同)
  • 什么是范围包?我从来没有听说过这个. (2认同)
  • @PinguinoSod,不,对于非作用域包来说,它仍然是不可能的(截至 2019 年 12 月)。Sonatype 是我所知道的唯一解决方案。请参阅/sf/answers/3569714081/ (2认同)

Gil*_*dre 53

在版本4.4.1上,如果您可以更改包名称,请使用:

npm config set @myco:registry http://reg.example.com
Run Code Online (Sandbox Code Playgroud)

@myco您的包装范围在哪里.

您可以这样安装包:

npm install @myco/my-package
Run Code Online (Sandbox Code Playgroud)

有关更多信息:https://docs.npmjs.com/misc/scope

  • 好的,但是如何对该注册表进行回退 (3认同)

Swa*_*der 46

我相信得票最高的答案可能已经过时了。截至2021 年 6 月,有一种更简单的方法可以使用npmrc npm 库来执行此操作。

1.安装npmrc

要安装 npmrc,请在命令行上运行 npm i npmrc -g

2. 创建您的第一个 npm 配置文件

安装 npmrc 后,您可以创建一个配置文件来访问您的自定义(可能是公司的)注册表。

要创建 npm Enterprise 配置文件,请在命令行上运行npmrc -c name-of-profile。例如,要创建名为“work”的配置文件,请运行以下命令: npmrc -c work

要为配置文件设置 npm Enterprise 注册表,请运行以下命令,并替换your-company-registry为您公司的 npm Enterprise 注册表的名称:

npm config set registry https://registry.your-company-registry.npme.io/

3. 为公共 npm 注册表创建配置文件

创建 npm Enterprise 配置文件后,您可以为不同的注册表(例如公共 npm 注册表)创建第二个配置文件。

要为公共注册表创建配置文件,请在命令行上运行npmrc -c name-of-profile。例如,要创建名为“open-source”的配置文件,请运行npmrc -c open-source. 要为您的开源配置文件设置公共注册表,请运行以下命令: npm config set registry https://registry.npmjs.org/

4. 使用 npmrc 切换配置文件

要切换配置文件,请在命令行上运行以下命令,并将 profile-name 替换为您的配置文件的名称:

npmrc profile-name

  • 如何处理在多个存储库上使用范围名称的用例?例如。npm 上的 @test/a 和 github 上的 @test/b (5认同)
  • @Murat:切换到配置文件后,您可以在命令行中执行: `npm config set //pkgs.dev.azure.com/myCompany/_packaging/npm/:username=myCompanyUsername &amp;&amp; npm config set //pkgs。 dev.azure.com/my_company/_packaging/npm/:_password="...."` (2认同)

owa*_*786 14

不是最好的方法但是如果你在Windows中使用mac或linux,你可以为不同的注册表设置别名.

##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'
Run Code Online (Sandbox Code Playgroud)

  • 类似的解决方案是设置一个别名,将 --registry 选项传递给 npm。这具有相同的效果,但仅适用于单个命令。语法为 `alias npm-sin=npm --registry https://localhost:4873/` (6认同)

Gre*_*gra 14

对于那些也在寻找身份验证解决方案的人,我会添加一个范围包解决方案,您可以在.npmrc文件中包含多行:

//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy
Run Code Online (Sandbox Code Playgroud)

每行代表一个不同的NPM注册表

  • 我会使用命令`npm login --registry = npm.example.com`。它将登录凭据(authTokens)存储在用户文件夹中的.npmrc文件中,因此您无需将其包含在源代码中(https://docs.npmjs.com/cli/adduser) (2认同)

Pat*_*atS 8

由于它已经过了几年而且似乎不可能这样做(仅使用npm),这个问题的解决方案是使用Nexus Repository Manager(来自Sonatype).Nexus支持多个存储库,允许您订购它们,以及代理/缓存以提高速度.

存在免费版和专业版/付费版.支持此功能的功能描述如下:https: //help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries

相关信息在下面重复,因此如果/当上述URL /链接停止工作时,信息仍在此处.

建议使用存储库组将所有npm注册表存储库从存储库管理器公开给用户,而无需进一步的客户端配置.存储库组允许您使用一个URL向npm和其他工具公开多个代理和托管存储库的聚合内容.

它允许您创建私有npm注册表

私有npm注册表可用于上传您自己的包以及第三方包.

要减少重复下载并提高开发人员和CI服务器的下载速度,您应该代理https://registry.npmjs.org上托管的注册表.默认情况下,npm直接访问此注册表.您还可以代理您需要的任何其他注册表.

因此,为实现这一目标,您需要做一些快速的项目符号列表:

  • 安装Nexus

  • 创建本地/私人仓库(或指向另一台服务器上的私人仓库)

  • 创建一个列出您的私人仓库和公共仓库的GROUP.

  • 配置$ HOME/.npmrc文件以指向刚刚创建的"GROUP".

  • 将您的私人npm包发布到本地仓库.

  • 用户现在可以运行一次性设置.

npm config set registry https://nexus/content/groups/GROUP

  • 然后用户可以通过安装公共或私人包npm install. npm install my-private-package npm install lodash any-other-public-package

您可以通过简单的npm install命令安装公共和私有软件包.Nexus找到包搜索组中配置的每个repo并返回结果.因此,npm仍然认为只有一个注册表,但幕后有多个回购正在使用.

重要说明:发布组件时,您需要指定npm publish --registry https://nexus/content/repositories/private-repo my-private-package命令,以便将包发布到正确的存储库.


小智 6

您可以对文件中的registry条目使用多种存储库语法.npmrc

registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

这将使您的npm在不同的服务器中查找软件包。

  • 有没有官方文档描述这个功能?我找不到任何。 (2认同)

Kau*_*s2b 4

您可以尝试一些步骤。(这就是我们在工作场所的做法)

  • 创建具有两个(或更多)存储库源地址的注册表组。一个是您的内部私有的,另一个是 npmjs 的代理,优先考虑内部代理。
  • 在 .npmrc 文件中将此组设为您的注册表。这样 npm 将始终尝试从内部获取它,如果找不到,则从代理获取它

希望有帮助。

  • 如何在 npm 中创建注册表组?这意味着什么? (8认同)