使用 Yarn 从 Github 包注册表安装私有包失败,未经授权
Posted
技术标签:
【中文标题】使用 Yarn 从 Github 包注册表安装私有包失败,未经授权【英文标题】:Installing private package from Github Package registry using Yarn fails with not authorized 【发布时间】:2020-08-27 12:46:25 【问题描述】:这个问题与这些有关。但是没有一个解决方案对我有用。
Yarn can't find private Github npm registry Installing private package from Github Package registry fails with not found/not authorized我可以使用npm install @scope/package
安装一个包而不会出现问题,但是我不能对纱线做同样的事情:yarn add @scope/package
yarn 抛出以下错误:
An unexpected error occurred: "https://npm.pkg.github.com/download/@scope/package/1.2.8/089b08cffb16074c210ec3a59b04de268ae1c7b3a0492dce110adee3ada05bdd: Request failed \"401 Unauthorized\"".
我的 .npmrc 文件如下所示:(尝试使用和不使用以下 .yarnrc)
registry=https://registry.npmjs.org/
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
@scope:registry=https://npm.pkg.github.com/
我已尝试添加此 .yarnrc 文件:
registry "https://registry.npmjs.org"
"@scope:registry" "https://npm.pkg.github.com"
(没有 .yarnrc)我试过这个 .npmrc 文件
registry=https://registry.yarnpkg.com/
@scope:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=MY_AUTHTOKEN
always-auth=true
MY_AUTHTOKEN
是我从 Github 生成的 Personal Access Token
。 (它可以访问包中的所有内容)
我已经尝试过:
删除 yarn.lock 删除 .yarnrc 使用我的 PAT 作为密码以npm login
登录
注销 npm 并删除全局 .npmrc 和 .yarnrc
用yarn login
登录
如有任何混淆 我实际上并没有尝试 @scope 和 /package,而是我的实际范围和包名称。
我确实可以访问 Github 上的范围和包。
我的第一个设置在 npm 上也能正常工作。但我无法使用 yarn,也无法在 SO 上找到任何有效的现有解决方案。
【问题讨论】:
【参考方案1】:以下内容在.npmrc
中为我工作
@mvce-superstars:registry=https://npm.pkg.github.com
使用yarn v2,以下在.yarnrc.yml
中为我工作:
npmScopes:
"mvce-superstars":
npmAlwaysAuth: true
npmRegistryServer: "https://npm.pkg.github.com"
首先,注意 小写 范围名称。这应该是发布包的存储库所有者的名称 (MVCE-Superstars
),但名称必须全部小写。
设置
发布
我为此hello-world 存储库创建了一个private copy。 我将上面的.npmrc
OR .yarnrc.yml
文件复制到了存储库中。
接下来我使用npm login --registry=https://npm.pkg.github.com/
OR yarn npm login --scope=mvce-superstars
命令登录
我输入了我的 github 用户名和我的 token(范围为 read:package
、write:package
和 repo
)
最后,我使用 npm publish
将包推送到我的私人仓库 OR yarn npm publish
输出
npm notice
npm notice ? @mvce-superstars/hello-world-npm@1.1.1
npm notice === Tarball Contents ===
npm notice 16.3kB example.gif
npm notice 89B bin.js
npm notice 175B lib/index.js
npm notice 734B package.json
npm notice 2.0kB yarn-error.log
npm notice 570B Readme.md
npm notice 167B init.sh
npm notice === Tarball Details ===
npm notice name: @mvce-superstars/hello-world-npm
npm notice version: 1.1.1
npm notice package size: 14.3 kB
npm notice unpacked size: 20.0 kB
npm notice shasum: 5379c8030fa9c5f57e5baef67f2a8a784ce93361
npm notice integrity: sha512-FAI/Wuy4gHW8C[...]FINQeIlZ+HDdg==
npm notice total files: 7
npm notice
+ @mvce-superstars/hello-world-npm@1.1.1
正在下载
我使用npm init
(use-hello-world-npm
) 创建了一个新的 npm 项目
我把上面的.npmrc
复制到文件夹的根目录
接下来我退出 npm (npm logout --registry=https://npm.pkg.github.com/
) 并重新登录 (npm login --registry=https://npm.pkg.github.com/
),以确保
最后,我运行 yarn
并按预期运行,它成功了!
输出
yarn install v1.22.4
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 0.55s.
纱线 v2
➤ YN0000: ┌ Resolution step
➤ YN0014: │ @mvce-superstars/hello-world-npm@npm:^1.1.1: Only some patterns can be imported from legacy lockfiles (not "https://npm.pkg.github.com/download/@mvce-superstars/hello-world-npm/1.1.1/426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a#5379c8030fa9c5f57e5baef67f2a8a784ce93361")
➤ YN0000: └ Completed in 0.55s
➤ YN0000: ┌ Fetch step
➤ YN0013: │ @mvce-superstars/hello-world-npm@npm:1.1.1::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40mvce-superstars%2Fhello-world-npm%2F1.1.1%2F426126f89734c2c76bfac0342c1de9c95ad003b6e905a7b9f9f745892c86da7a can't be found in the cache and will be fetched from the remote server
➤ YN0000: └ Completed in 1.3s
➤ YN0000: ┌ Link step
➤ YN0031: │ One or more node_modules have been detected and will be removed. This operation may take some time.
➤ YN0000: └ Completed
➤ YN0000: Done with warnings in 1.87s
yarn
之后的文件夹内容
.
├── node_modules
│ └── @mvce-superstars
├── package.json
└── yarn.lock
为了更好的衡量,我将其删除 (yarn remove @mvce-superstars/hello-world-npm
):
yarn remove v1.22.4
[1/2] Removing module @mvce-superstars/hello-world-npm...
[2/2] Regenerating lockfile and installing missing dependencies...
success Uninstalled packages.
Done in 0.06s.
并再次添加 (yarn add @mvce-superstars/hello-world-npm
):
yarn add v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
└─ @mvce-superstars/hello-world-npm@1.1.1
info All dependencies
└─ @mvce-superstars/hello-world-npm@1.1.1
Done in 1.08s.
来源:
https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-npm-for-use-with-github-packages https://gemfury.com/help/private-yarn/ https://github.com/yarnpkg/yarn/issues/4451【讨论】:
也许吧,虽然我非常怀疑。我能够用 Yarn2 解决它,并且很容易地使用新的 yarnrc.yml 文件(没有其他更改),这表明这是一个 Yarn 问题。但是,您的答案绝对很棒,并且可能对其他人有所帮助,您显然为此付出了努力并对其进行了测试,因此您绝对应该得到公认的答案。但是,如果这对其他人也不起作用。尝试升级到 Yarn 2 :) @MLyck 太好了。我已经用使用 yarn v2 的结果更新了我的答案。【参考方案2】:您只需在项目的根目录中使用 .npmrc 即可:
//npm.pkg.github.com/:_authToken=GITHUB_PERSONAL_TOKEN
@OWNER:registry=https://npm.pkg.github.com
请记住,GITHUB_PERSONAL_TOKEN 需要 read:packages 范围权限才能从您的私人存储库中读取包。
【讨论】:
纱线不读取.npmrc
。它正在寻找.yarnrc.yml
。【参考方案3】:
我在这里添加一个答案,因为经过一天在这里和其他地方尝试不同的解决方案变体后,我发现我的问题是别的东西。
我的问题是,虽然npm
对包名称不区分大小写,但yarn
涉及身份验证! ?♂️
所以,使用this solution中的示例:
registry=https://registry.yarnpkg.com/
@GITHUB_USERNAME:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
always-auth=true
我需要确保两件事:
@GITHUB_USERNAME
需要来匹配您在 github 上看到的大小写和发布包的名称。即,如果您的用户名是 Pickle-Rick,则需要输入 @Pickle-Rick:registry=https://npm.pkg.github.com
,而不是 @pickle-rick
或 @Pickle-rick
。
您需要在 package.json
或 yarn add
命令中匹配此大小写 - 无论您使用的是哪个。例如:
"@Pickle-Rick/schwifty": "^1.0.0"
在package.json
或yarn add @Pickle-Rick/schwifty
。
我通过挖掘yarn
github issues找到了这个解决方案。
【讨论】:
以上是关于使用 Yarn 从 Github 包注册表安装私有包失败,未经授权的主要内容,如果未能解决你的问题,请参考以下文章
Yarn 包管理器:从私有 Bitbucket 存储库安装依赖项
无法从 GitHub NPM 注册表 (npm.pkg.github.com) 通过 yarn 下载依赖项