Node.js 如何在.npmrc中为作用域注册表设置_auth?

Node.js 如何在.npmrc中为作用域注册表设置_auth?,node.js,authentication,npm,nexus,npm-publish,Node.js,Authentication,Npm,Nexus,Npm Publish,我想知道如何配置.npmrc文件,这样我就可以拥有一个默认注册表和一个不同范围的具有身份验证的注册表 我正在为私有存储库使用Nexus,我不确定如何为作用域注册表(仅默认注册表)设置身份验证 例如,我的~/.npmrc文件是: registry=https://registry.npmjs.org/ @test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/ email=test@user.com _au

我想知道如何配置
.npmrc
文件,这样我就可以拥有一个默认注册表和一个不同范围的具有身份验证的注册表

我正在为私有存储库使用Nexus,我不确定如何为作用域注册表(仅默认注册表)设置身份验证

例如,我的
~/.npmrc
文件是:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
email=test@user.com
_auth="…"
如果我对作用域为
测试作用域的包执行
npm publish
,我会得到一个身份验证错误

那么,
\u auth
仅适用于
注册表=…
部分。是否有一种方法可以为
@testscope:registry=…
部分指定身份验证项


谢谢,

所以,在深入研究NPM源代码之后,发现有一种方法可以做到这一点

我的解决方案如下:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=YWRtaW4xMjM=
email=…
说明:

scope
@test scope
指定在执行
npm publish
命令时,应将具有该作用域的包发布到与默认的
registry=
不同的注册表

//nexus:8081/..
开头的两行用于指定作用域存储库中
用户名
\u密码
的凭据,其中
\u密码
是先前使用的
\u auth
凭据中的base64编码密码组件

使用这种方法,只有作用域包才会从专用注册表发布和安装,而所有其他包都将从默认注册表安装

编辑:

除此之外,还可以将密码指定为环境变量,这样它就不会以明文形式存储在文件中

例如:

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=${BASE64_PASSWORD}
email=…

此外,在使用Nexus时,必须指定
电子邮件=
行。

由于某种奇怪的原因,当与作用域包一起使用时,
\u auth
称为
\u authToken
。如果您正在使用此密码,则不必将纯文本密码存储在
.npmrc

registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/ 
//nexus:8081/nexus/content/repositories/npm-test/:_authToken=...
email=…

运行以下命令,将@company scope替换为scope,并将company registry替换为您公司的npm企业注册表的名称:

npm login --scope=@company-scope --registry=https://registry.company-registry.npme.io/

此信息可在npm上获得。

如果我正确理解了您的场景,您要求分别为
npm private
注册表和
npm open
注册表设置两个不同的身份验证。不一定是
npm open
,只是
npm private
,尽管知道他们如何都拥有auth会很有趣。(我确实意识到这个示例有一个
\u auth
键)我认为没有办法做到这一点,因为我认为假设您的注册表将使用与作用域注册表相同的用户名/密码。您不通过NXRM代理npmjs.org有什么原因吗?如果是这样的话,我认为您可以使用相同的user/auth,它会工作的。这是预期的使用情形。我们在TTL和使用Nexus代理的同一软件包的不同版本上遇到了一些问题,因此我们将此作为替代方案。@joedragons仅供参考-事实证明这是可能的。参见下面我的答案。参见我的答案,了解无需存储计划测试密码的标准方法。请清楚地说明
append
not
prepend
范围。谢天谢地,我终于找到了你的答案,当我与Nexus配对时,它帮助我超越了Gitlab CICD的界限!在我的
.gitlab ci.yml
文件中,我设置了
npm配置集'nexusurhere/repository/npm group/:_auth'${NEXUS\u TOKEN}
,然后我在gitlab中将NEXUS\u TOKEN设置为一个秘密,然后离开:)