Yarn 和 npm 忽略范围私有注册表设置

Mar*_*arc 6 npm yarnpkg

我正在将Google Artifact 注册表用于私有节点模块。私有模块的范围为“@myscope”,这就是我的 .npmrc 中的内容:

@myscope:registry=https://europe-west3-npm.pkg.dev/my-project/frontend/
//europe-west3-npm.pkg.dev/my-project/frontend/:_password="eW..E="
//europe-west3-npm.pkg.dev/my-project/frontend/:username=oauth2accesstoken
//europe-west3-npm.pkg.dev/my-project/frontend/:email=not.valid@email.com
//europe-west3-npm.pkg.dev/my-project/frontend/:always-auth=true
Run Code Online (Sandbox Code Playgroud)

我有一个项目“test”,其依赖项“@myscope/testdependency”,这是 package.json:

{
  "dependencies": {
    "@myscope/testdependency": "^1.2.5"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 a 时yarn install --verbose,我看到这个:

...
[1/4] Resolving packages...
verbose 0.23567398 Performing "GET" request to "https://europe-west3-npm.pkg.dev/my-project/frontend/@myscope%2ftestdependency".
verbose 0.381522173 Request "https://europe-west3-npm.pkg.dev/my-project/frontend/@myscope%2ftestdependency" finished with status code 200.
[2/4] Fetching packages...
verbose 0.406426655 Performing "GET" request to "https://registry.yarnpkg.com/@myscope/testdependency/-/@myscope/testdependency-1.2.5.tgz".
verbose 0.86999269 Error: https://registry.yarnpkg.com/@myscope/testdependency/-/@myscope/testdependency-1.2.5.tgz: Request failed "404 Not Found"
...
Run Code Online (Sandbox Code Playgroud)

所以解析部分看起来是正确的,但实际的获取忽略了我的设置。

这是我的纱线配置:

info yarn config
{
  'version-tag-prefix': 'v',
  'version-git-tag': true,
  'version-commit-hooks': true,
  'version-git-sign': false,
  'version-git-message': 'v%s',
  'init-version': '1.0.0',
  'init-license': 'MIT',
  'save-prefix': '^',
  'bin-links': true,
  'ignore-scripts': false,
  'ignore-optional': false,
  registry: 'https://registry.yarnpkg.com',
  'strict-ssl': true,
  'user-agent': 'yarn/1.22.17 npm/? node/v12.16.3 linux x64',
  '@myscope:registry': 'https://europe-west3-npm.pkg.dev/my-project/frontend/',
  lastUpdateCheck: 1645016355470
}
info npm config
{
  '@myscope:registry': 'https://europe-west3-npm.pkg.dev/my-project/frontend/',
  '//europe-west3-npm.pkg.dev/my-project/frontend/:_password': 'eW...E=',
  '//europe-west3-npm.pkg.dev/my-project/frontend/:username': 'oauth2accesstoken',
  '//europe-west3-npm.pkg.dev/my-project/frontend/:email': 'not.valid@email.com',
  '//europe-west3-npm.pkg.dev/my-project/frontend/:always-auth': true
}
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,npm 还试图从yarn 注册表中获取这个包。这是的输出npm install --verbose

...
npm http fetch GET 200 https://europe-west3-npm.pkg.dev/my-project/frontend/@myscope%2ftestdependency 156ms
npm http fetch GET 404 https://registry.yarnpkg.com/@myscope/testdependency/-/@myscope/testdependency-1.2.5.tgz 319ms
npm http fetch GET 404 https://registry.yarnpkg.com/@myscope/testdependency/-/@myscope/testdependency-1.2.5.tgz 244ms
npm timing stage:rollbackFailedOptional Completed in 1ms
npm timing stage:runTopLevelLifecycles Completed in 773ms
npm verb stack Error: 404 Not Found - GET https://registry.yarnpkg.com/@myscope/testdependency/-/@myscope/testdependency-1.2.5.tgz
...

Run Code Online (Sandbox Code Playgroud)

类似的情况。向私有注册表发出了成功的请求,但随后它尝试从纱线注册表中获取它。

这是以下的输出npm config ls -l | grep registry

metrics-registry = "https://registry.npmjs.org/"
@myscope:registry = "https://europe-west3-npm.pkg.dev/my-project/frontend/"
; metrics-registry = null (overridden)
registry = "https://registry.npmjs.org/"
Run Code Online (Sandbox Code Playgroud)

我们也在同事的机器上尝试过。相同的结果。

纱线版本:1.22.17
npm 版本:6.14.4

关于这里出了什么问题有什么想法吗?

更新:我尝试了 npmjs 注册表而不是 Google Artifact,它运行良好。所以这很可能是与谷歌有关的问题