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

时间:2018-03-21 11:16:21

标签: 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
_auth="…"

如果我对npm publish范围内的包进行test-scope,则会收到身份验证错误。

AFAIK,_auth仅适用于registry=...部分。有没有办法为@test-scope:registry=...部分指定身份验证密钥?

谢谢,

3 个答案:

答案 0 :(得分:14)

因此,经过一些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=…

<强>解释

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

//nexus:8081/...开头的两行用于指定username_password的作用域存储库的凭据,其中_password是来自的_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=… 凭据。

使用此方法,将仅从私有注册表发布和安装作用域包,并且将从默认注册表安装所有其他包。

修改

除此之外,可以将密码指定为环境变量,以使其不以纯文本形式存储在文件中。

例如:

email=

此外,使用Nexus时,必须指定func fetchJsonFor(path: String, langugae: String) -> AnyObject{ var components = URLComponents() components.scheme = Constants.APIScheme components.host = Constants.APIHost components.path = Constants.APIPath components.path.append(path) components.path.append(langugae) let request = URLRequest(url: components.url!) var parsedJSON: AnyObject! let task = URLSession.shared.dataTask(with: request) { (data, response, error) in if error != nil{ print(error?.localizedDescription ?? "Error") return } guard let data = data else{ return } do{ parsedJSON = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as AnyObject } catch{ print("Can't parse JSON: \(data)") return } } task.resume() return parsedJSON } 行。

答案 1 :(得分:6)

出于某种奇怪的原因,_auth与范围包一起使用时称为_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=…

答案 2 :(得分:0)

运行以下命令,将 @ company-scope 替换为范围,并将 company-registry 替换为公司的npm Enterprise注册表名称:

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

此信息可在npm documention上获得。