我想知道如何配置.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=...
部分指定身份验证密钥?
谢谢,
答案 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上获得。