macos - 如何将 NPM 连接到 Mac 上的天蓝色工件源?
问题描述
我正在尝试从 Mac 连接到我的私人 npm 提要。我从 Connect 生成凭据到 feed菜单,它们看起来像这样:
; begin auth token
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:username=ANYTHING-BUT-EMPTY
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:_password=BASE64-ENCODED-PAT-GOES-HERE
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/:username=ANYTHING-BUT-EMPTY
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/:_password=BASE64-ENCODED-PAT-GOES-HERE
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
我把它放在我项目的 .npmrc 文件中,但它没有用。当我尝试执行npm install时,出现此错误:
code E401
npm ERR! Unable to authenticate, need: Bearer authorization_uri=https://login.windows.net/...,
Basic realm="https://pkgsprodsu3weu.app.pkgs.visualstudio.com/", TFS-Federated
我还将这些凭据放在 $HOME 目录中,这也没有解决问题。我究竟做错了什么?它们应该在哪个 .npmrc 文件中?我应该运行其他命令来使用它们吗?
解决方案
如何将 NPM 连接到 Mac 上的天蓝色工件源?
.npmrc
包含凭据的文件应设置在$home
目录中。
查看文档Use npm to store JavaScript packages in Azure DevOps Services or TFS:
在您的开发机器上,对于 Linux 或 Mac 系统,您还有一个位于 $home 中的 .npmrc 文件,对于 Windows 系统,您还有一个位于 $env.HOME 的文件。此 .npmrc 文件应包含您需要连接到的所有注册表的凭据。npm 客户端将查看您项目的 .npmrc 文件,发现注册表,并从 $home/.npmrc 或 $env.HOME/.npmrc 获取匹配的凭据。下一节将讨论凭证获取。
由于它仍然不适合您,您可以检查您的 npmrc 令牌是否已过期。在您的 .npmrc 中,我发现您正在使用BASE64-ENCODED-PAT-GOES-HERE
,似乎您正在使用 PAT,但在90 天令牌类型中。该.npmrc
文件应如下所示:
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:username=ANYTHING-BUT-EMPTY
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:_password=BASE64-ENCODED-PAT-GOES-HERE
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:email=YOUREMAIL@EXAMPLE.COM
//pkgs.dev.azure.com/<yourorganization>/_packaging/<yourfeed>/npm/registry/:always-auth=true
如果还是 401 错误,请检查您的PAT 是否已过期并转换为 Base64String或没有足够的权限。
希望这可以帮助。