我正在尝试访问托管在远程服务器中的私有(private) npm 注册表。我必须使用用户名和密码访问它。我这边没有代理。
但是,我使用的用户名和密码包含不安全的 URL 字符。我试过 adduser
、npmjs
、scl
但我无法配置凭据:
npm WARN Name may not contain non-url-safe chars
我尝试直接从命令行设置 NPM_USER
和 NPM_PASS
。我可以设置前者,但后者失败。即使我使用简单的密码并尝试:
npm login
由于 NPM_USER
有一个 @
我正在使用 npmrc
在公共(public)和私有(private)注册表之间切换。我想避免使用 Nexus/JFrog
之类的工具。
npm version - 4.0.5 and OS is Windows 7
我在这里错过了什么?
最佳答案
回顾一下,您的问题是您的私有(private)注册表使用电子邮件地址作为用户名,npm 命令行工具目前不支持。您需要一种方法来提供您的用户名,而无需运行 npm adduser
或 npm login
。我不知道您使用的是哪个注册表,但我遇到了与 Inedo's Proget 相同的问题.
编辑:我在 2021 年 3 月遇到了同样的问题,Azure Artifacts in Azure DevOps , 因为 npm 命令行工具仍然不允许在用户名中使用 @
,而且 vsts-npm-auth
命令行工具 does not work on Linux or Mac .我对 Artifactory 也有同样的问题。
如果您使用私有(private)注册表并且使用范围来分隔不同的注册表,则可以创建如下所示的 .npmrc
文件:
#Settings for @SCOPENAME
@SCOPENAME:registry=https://DOMAIN/FEED/
//DOMAIN/FEED/:username=USER@DOMAIN
//DOMAIN/FEED/:_password=BASE64(PASSWORD)
//DOMAIN/FEED/:email=EMAIL_ADDRESS
//DOMAIN/FEED/:always-auth=true
#Settings for @OTHERSCOPENAME
@OTHERSCOPENAME:registry=...
下一点可能很重要,但这取决于您的注册表首选的提要网址:如果没有尾随 /
,我无法使其正常工作,因此请注意尝试使用和不使用它.
获取密码的 base64 编码的一种简单方法是运行:
echo -n 'PASSWORD' | base64
编辑:对于某些注册表,例如 Azure Artifacts ,您需要使用个人访问 token 而不是普通密码。查找有关如何创建 token 的注册表说明。
编辑:如果您只使用一个注册表,也可以使用没有范围的 .npmrc
文件:
# Global settings
registry=https://DOMAIN/FEED/
//DOMAIN/FEED/:username=USER@DOMAIN
//DOMAIN/FEED/:_password=BASE64(PASSWORD)
//DOMAIN/FEED/:email=EMAIL_ADDRESS
//DOMAIN/FEED/:always-auth=true
关于node.js - 带有特殊字符的 npm 私有(private)注册表用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543439/