如何为目标注册表上未设scope的NPM包配置Registry Scoping?
解决无Scope包的多Registry配置问题
你的问题出在scope映射配置只适用于带scope前缀的包,但你要拉取的package-a和package-b发布时并没有添加scope,所以npm会把@first/package-a当成带scope的包去请求,而registry-a里实际只有无scope的package-a,导致404。
下面两种方案可以解决:
方案一:给特定包直接指定Registry(推荐)
移除原来的scope映射配置,在.npmrc中针对具体包配置Registry:
# 指定package-a从registry-a拉取 package-a:registry=https://registry-a.org/registry/ # 指定package-b从registry-b拉取 package-b:registry=https://registry-b.org/registry/ # 其余包默认用npm官方源 registry=https://www.npmjs.com
配置完成后,直接执行npm install package-a,npm会自动从registry-a获取该包;npm install package-b从registry-b获取,其余包默认走官方源。
方案二:用别名映射Scope到无Scope包
如果需要保留@first/package-a这样的写法,可以通过npm别名功能实现:
- 保持你原来的
.npmrcscope配置不变:
@first=registry=https://registry-a.org/registry/ @second=registry=https://registry-b.org/registry/ registry=https://www.npmjs.com
- 在项目的
package.json中用别名声明依赖:
"dependencies": { "@first/package-a": "npm:package-a@^1.0.0", "@second/package-b": "npm:package-b@^1.0.0" }
这样npm会把@first/package-a解析为实际的package-a,同时使用@first对应的registry-a去拉取。
内容的提问来源于stack exchange,提问作者Aidan Moffat
相关产品推荐
相关产品推荐

