这是我的问题。我们有一个私有NPM注册表,仅在VPN中有效。我想拥有一个后备注册表https://registry.npmjs.org,以便当我退出VPN时它可以无缝运行。
PS当前,我正在使用npmrc,它可以很好地在.npmrc文件之间进行切换,这是一种解决方法
这是我的问题。我们有一个私有NPM注册表,仅在VPN中有效。我想拥有一个后备注册表https://registry.npmjs.org,以便当我退出VPN时它可以无缝运行。
PS当前,我正在使用npmrc,它可以很好地在.npmrc文件之间进行切换,这是一种解决方法
Answers:
你可以有多个注册范围的包在你的.npmrc文件中。例如:
@polymer:registry=<url register A>
registry=http://localhost:4873/
@polymer范围内的软件包将从https://registry.npmjs.org接收,而其余的软件包将从您本地的NPM接收。
在版本4.4.1上,如果可以更改程序包名称,请使用:
npm config set @myco:registry http://reg.example.com
@myco您的包装范围在哪里。
您可以通过以下方式安装软件包:
npm install @myco/my-package
有关更多信息:https : //docs.npmjs.com/misc/scope
Invalid package name "@npmjs/": name can only contain URL-friendly characters跑步的时候到了npm i
对于也在寻找身份验证解决方案的任何人,我都会添加作用域软件包解决方案,您可以在.npmrc文件中包含多行:
//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy
每行代表一个不同的NPM注册中心
npm login --registry=npm.example.com。它将存储在.npmrc文件中的登录凭据(authTokens)在你的用户文件夹,这样你就需要把它的源代码做(docs.npmjs.com/cli/adduser)
registry.npmjs.org,这个工作对我来说
这不是最好的方法,但是如果即使在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/'
alias npm-sin=npm --registry https://localhost:4873/
由于已经有几年了,而且似乎不可能做到这一点(仅使用npm),因此解决此问题的方法是使用Nexus Repository Manager(来自Sonatype)。Nexus支持多个存储库,您可以订购它们,还可以代理/缓存以提高速度。
有免费版和专业版/付费版。支持此功能的功能在以下网址中进行了描述:https : //help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries
相关信息在下面重复,因此,如果/当上述URL /链接停止工作时,该信息仍在此处。
建议使用存储库组,以将所有npm注册表存储库从存储库管理器公开给用户,而无需任何其他客户端配置。存储库组允许您使用一个指向npm的URL和其他工具来公开多个代理和托管存储库的聚合内容。
它使您可以创建私人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找到在组中配置的每个存储库中搜索的软件包,然后返回结果。因此,npm仍然认为只有一个注册表,但是幕后正在使用多个存储库。
重要说明:发布组件时,需要指定npm publish --registry https://nexus/content/repositories/private-repo my-private-package命令,以便将软件包发布到正确的存储库。
npm-private而不是npm-group),则可以registry在package.json项目的中覆盖-key (https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages有关详细信息,请参见)。使用,npm config set registry <url>您可以将其设置为例如npm-group,其中包含npm-registry(转发存储库)和npm-private(您自己的存储库)。我使用了此解决方案,因为要从本地GitLab CE中获取工件太复杂了。
您可以对文件中的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/
这将使您的npm在不同的服务器中查找软件包。
serverA,serverB和serverC例如仓库都从我们的内部网络中,你不会工作。我不知道它是否适合您,但如果认为适合,您可以尝试为内部存储库部署Nexus Repository Manager。
您可以尝试一些步骤。(它如何在我的工作场所做到)
希望有帮助。
我为此使用Strongloop的cli工具;有关更多信息,请参见https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/
在存储库之间切换很容易: slc registry use <name>
到2020年4月13日,除非您能够使用其他范围,否则将没有此类功能,但是您可以使用安装后脚本作为解决方法。它总是执行,还有,以后每次NPM安装:
假设您已将.npmrc配置为从私有github存储库中安装@ foo-org / foo-pack-private,但是@ foo-org / foo-pack-public公共软件包位于npm上(在同一范围内:foo- org)。
您的后安装可能如下所示:
"scripts": {
...
"postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}
不要忘记从依赖项数组中删除@ foo-pack / foo-org,以确保npm install不会尝试从github获取它,并添加--dry-run标志以确保package.json和package- npm安装后lock.json保持不变。
我的方法是制作一个轻微的命令行变体,以添加注册表开关。
我在找到npm可执行文件的nodejs文件夹中创建了这些文件:
npm-.cmd:
@ECHO OFF
npm --registry https://registry.npmjs.org %*
npm-:
#!/bin/sh
"npm" --registry https://registry.npmjs.org "$@"
现在,如果我想对普通的npm注册表进行操作(当我未连接到VPN时),我只需输入npm-通常会输入的位置即可npm。
要测试此命令并查看软件包的注册表,请使用以下示例:
npm- view lodash
PS。我在Windows中,已经在Bash,CMD和Powershell中对此进行了测试。我也