我在从 GCP 安装 NPM 软件包时遇到问题。
通过执行以下步骤,我能够将包上传到 GCP 的工件注册表:
-
登录我的谷歌帐户 (
gcloud auth application-default login
) -
跑
gcloud artifacts print-settings npm --project=[my-project] --repository=[my-repo] --location=us-east1 --scope=@[my-scope]
-
将上一步的输出粘贴到位于项目根目录中的
.npmrc
文件中。 -
将访问令牌刷新为 GCP (
npx google-artifactregistry-auth ./.npmrc
) -
运行
yarn publish
我的.npmrc
文件如下所示:
@[my-scope]:registry=https://us-east1-npm.pkg.dev/[my-project]/[my-repo]/
//us-east1-npm.pkg.dev/[my-project]/[my-repo]/:_authToken="[auth-token]"
//us-east1-npm.pkg.dev/[my-project]/[my-repo]/:always-auth=true
但是,当我尝试通过以下方式在另一个项目上安装软件包时:
- 执行上述步骤 1-4
- 运行
yarn add @[my-scope]/[my-package]
我收到 404 错误。 看起来yarn正在默认注册表中查找包:
error An unexpected error occurred: "https://registry.yarnpkg.com/@[my-scope]/@[my-pacakge]/-/@[my-scope]/[my-package]-0.0.1.tgz: Request failed "404 Not Found"".
我只是按照 GCP 中的安装说明中提到的步骤进行操作,但不知何故它不起作用。
我在这篇文章中遇到了类似的问题:无法安装我发布到 GCP 中的 npm 注册表的作用域包,但这不是我得到的确切错误。
我将不胜感激有关此问题的任何帮助。
提前感谢!
我刚刚遇到了这个问题几天,解决方案很简单,发布时不要使用 YARN。就是这样。
我不知道纱线的哪一部分导致这种情况,但基本上它忽略了 .npmrc,导致压缩包指向错误的存储库,如果您运行yarn info
可以检查它。因此,在发布到 GCP 工件注册表时,应改用npm publish
。
在为 npm 和 管理 Node.js 包设置身份验证时,获取访问令牌部分使用的命令是
npx google-artifactregistry-auth
在同一部分中,有一个注释解释了如果需要更改.npmrc
文件的路径,如何添加标志。
注意: 如果您需要将存储库设置和凭据存储在默认值以外的 .npmrc 文件中,则可以使用其他标志运行凭据帮助程序。
--repo-config是包含存储库设置的 .npmrc 文件。如果未指定此标志,则默认位置为当前目录。
--credential-config是要在其中写入访问令牌的 .npmrc 文件的路径。默认值为用户 .npmrc 文件。
而不是:
npx google-artifactregistry-auth ./.npmrc
可以写成
npx google-artifactregistry-auth --repo-config=pathto/.npmrc --credential-config=pathto/.npmrc
如果您不确定文件的位置,可以按照此处的说明运行npm config ls -l | grep config
还要检查是否指定了正确的.npmrc
路径(如果它与默认注册表不同,如配置 npm 中所示),并确认您正在尝试从 Node.js 包存储库安装具有正确范围、包、标记或版本以完全显式的包。