私有存储库的 Scoped NPM 将斜杠“/”转换为“%2F”
Scoped NPM for private repository converts slash "/" to "%2F"
我想使用范围从私有存储库中获取私有 npm。
我已经这样设置了 .npmrc。
registry=https://registry.npmjs.org/
@myco:registry=https://nexus.myco.com/nexus/repository/
我已经这样设置了 .yarnrc。
registry "https://registry.npmjs.org/"
"@myco:registry" "https://nexus.myco.com/nexus/repository/"
但当我这样做时:
yarn --verbose add @myco/some-private-npm
它抛出这个错误:
verbose 0.708 Performing "GET" request to "https://nexus.myco.com/nexus/repository/@myco%2fsome-private-npm".
verbose 0.792 Request "https://nexus.myco.com/nexus/repository/@myco%2fsome-private-npm" finished with status code 404.
当我这样做时:
yarn --verbose add @myco:some-private-npm
它转到这个 400 url(Nexus:无效的存储库路径):
verbose 0.957 Request "https://nexus.myco.com/nexus/repository/@myco:some-private-npm" finished with status code 400.
实际 npm 位于:
https://nexus.myco.com/nexus/repository/myco/some-private-npm
如何确保获取的 url 没有“@”且“%2f”是“/”?
谢谢!
根据 this github issue 对于 yarn,尝试将类似的配置添加到您的 .yarnrc:
registry "https://registry.npmjs.org/"
"@myco:registry" "https://nexus.myco.com/nexus/repository/"
否则,我建议仔细阅读链接的问题并尝试提供的解决方案。
另一种可能的情况是斜杠编码并不是真正的问题。您根本无权访问该特定存储库。
这可以解释 404,因为如果您没有访问权限,出于安全原因,就好像它不存在一样,您不会得到 401。
我在 Github 操作中尝试 运行 npm publish
.tgz 文件时发现此页面,并获得以下内容(替换范围和包):
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@SCOPE%2fPACKAGE - Not found
npm ERR! 404
npm ERR! 404 '@SCOPE/PACKAGE@0.0.5' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
此包 IS 已发布,所以我认为 %2f 是导致问题的原因。根据 npmjs documentation.
,我也使用 NPM_TOKEN 作为环境变量
解法:
- name: Setup Node.js environment
uses: actions/setup-node@v2.1.2
with:
node-version: '12'
registry-url: 'https://registry.npmjs.org'
- name: Publish to npmjs
run: |
npm install
npm run pack
npm publish <package tgz> --access public
env:
NPM_TOKEN: ${{ secrets.NPM_APIKEY }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_APIKEY }}
注意:我不确定这里是否还需要 NPM_TOKEN。
我 运行 前段时间遇到过完全相同的问题。
如果您的存储库团队访问级别是 read/write,请检查 NPM。
在我这边,我所在的团队只有读取访问权限级别。切换解决了问题。
确保 .yarnrc 实际上包含
注册表“https://registry.npmjs.org/”
并不是
注册表“registry.npmjs.org”
那会给出同样的错误。
我想使用范围从私有存储库中获取私有 npm。 我已经这样设置了 .npmrc。
registry=https://registry.npmjs.org/
@myco:registry=https://nexus.myco.com/nexus/repository/
我已经这样设置了 .yarnrc。
registry "https://registry.npmjs.org/"
"@myco:registry" "https://nexus.myco.com/nexus/repository/"
但当我这样做时:
yarn --verbose add @myco/some-private-npm
它抛出这个错误:
verbose 0.708 Performing "GET" request to "https://nexus.myco.com/nexus/repository/@myco%2fsome-private-npm".
verbose 0.792 Request "https://nexus.myco.com/nexus/repository/@myco%2fsome-private-npm" finished with status code 404.
当我这样做时:
yarn --verbose add @myco:some-private-npm
它转到这个 400 url(Nexus:无效的存储库路径):
verbose 0.957 Request "https://nexus.myco.com/nexus/repository/@myco:some-private-npm" finished with status code 400.
实际 npm 位于:
https://nexus.myco.com/nexus/repository/myco/some-private-npm
如何确保获取的 url 没有“@”且“%2f”是“/”?
谢谢!
根据 this github issue 对于 yarn,尝试将类似的配置添加到您的 .yarnrc:
registry "https://registry.npmjs.org/"
"@myco:registry" "https://nexus.myco.com/nexus/repository/"
否则,我建议仔细阅读链接的问题并尝试提供的解决方案。
另一种可能的情况是斜杠编码并不是真正的问题。您根本无权访问该特定存储库。
这可以解释 404,因为如果您没有访问权限,出于安全原因,就好像它不存在一样,您不会得到 401。
我在 Github 操作中尝试 运行 npm publish
.tgz 文件时发现此页面,并获得以下内容(替换范围和包):
npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@SCOPE%2fPACKAGE - Not found
npm ERR! 404
npm ERR! 404 '@SCOPE/PACKAGE@0.0.5' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
此包 IS 已发布,所以我认为 %2f 是导致问题的原因。根据 npmjs documentation.
,我也使用 NPM_TOKEN 作为环境变量解法:
- name: Setup Node.js environment
uses: actions/setup-node@v2.1.2
with:
node-version: '12'
registry-url: 'https://registry.npmjs.org'
- name: Publish to npmjs
run: |
npm install
npm run pack
npm publish <package tgz> --access public
env:
NPM_TOKEN: ${{ secrets.NPM_APIKEY }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_APIKEY }}
注意:我不确定这里是否还需要 NPM_TOKEN。
我 运行 前段时间遇到过完全相同的问题。 如果您的存储库团队访问级别是 read/write,请检查 NPM。 在我这边,我所在的团队只有读取访问权限级别。切换解决了问题。
确保 .yarnrc 实际上包含 注册表“https://registry.npmjs.org/” 并不是 注册表“registry.npmjs.org” 那会给出同样的错误。