node.js - 带有特殊字符的 npm 私有(private)注册表用户名

标签 node.js npm

我正在尝试访问托管在远程服务器中的私有(private) npm 注册表。我必须使用用户名和密码访问它。我这边没有代理。

但是,我使用的用户名和密码包含不安全的 URL 字符。我试过 addusernpmjsscl 但我无法配置凭据:

npm WARN Name may not contain non-url-safe chars

我尝试直接从命令行设置 NPM_USERNPM_PASS。我可以设置前者,但后者失败。即使我使用简单的密码并尝试:

npm login

由于 NPM_USER 有一个 @

,因此失败并出现同样的错误

我正在使用 npmrc 在公共(public)和私有(private)注册表之间切换。我想避免使用 Nexus/JFrog 之类的工具。

npm version - 4.0.5 and OS is Windows 7

我在这里错过了什么?

最佳答案

回顾一下,您的问题是您的私有(private)注册表使用电子邮件地址作为用户名,npm 命令行工具目前不支持。您需要一种方法来提供您的用户名,而无需运行 npm addusernpm 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/

相关文章:

node.js - 如何使用数据在 mocha 中编写发布请求测试以测试响应是否匹配?

node.js - 当我尝试在 Node 中执行 https post 请求时,出现 getaddrinfo ENOTFOUND 错误

vue.js - PrimeVue Toast 组件错误 : Can't resolve './ToastMessage' in */toast

javascript - npm 错误! semver.simplifyRange 不是函数

javascript - npm 包版本结构中的 "rc"是什么意思

node.js - 使用自定义 baseUrl 访问我的 sails 应用程序时出现 ERR_TOO_MANY_REDIRECTS

multithreading - for 循环中的 PhantomJS Node

javascript - 只从 node.js 中的套接字读取前 N 个字节

react-native - 如何在 native react 中检查设备是否连接到蓝牙?

laravel - gulp 通知 : [Error in notifier] Error in plugin 'gulp-notify' not found: notify-send