能否从不同镜像源下载依赖?Azure私有源与npm公源配置求助
配置npm同时使用Azure私有源与公网源解决依赖拉取问题
问题背景
需要让项目中@xyz/typescript-sdk依赖从无法访问公网的Azure私有feed拉取,其余依赖从npm公网源获取。尝试在package.json中配置git+ssh路径并设置全局Azure源的.npmrc后,出现TAR_BAD_ARCHIVE错误。
相关文件内容
- 原始
package.json关键片段:
{ "dependencies": { "@angular/animations": "~12.2.0", "@xyz/typescript-sdk": "file:xyz-typescript-sdk-0.0.1.tgz" } }
- 错误的依赖配置尝试:
"dependencies": { "@xyz/typescript-sdk": "git+ssh://git@pkgs.dev.azure.com/ORGANIZATION/PROJECT/_packaging/FEED/npm/registry/" }
- 错误信息:
npm WARN tar TAR_BAD_ARCHIVE: Unrecognized archive format npm ERR! code TAR_BAD_ARCHIVE npm ERR! TAR_BAD_ARCHIVE: Unrecognized archive
- Azure提供的默认
.npmrc:
registry=https://pkgs.dev.azure.com/ORGANIZATION/PROJECT/_packaging/FEED/npm/registry/ always-auth=true
解决方案:使用npm作用域源配置多源
完全可以通过.npmrc的作用域绑定源实现需求,指定特定作用域的包从私有源拉取,其余包默认走公网源。
修正
.npmrc配置:
将全局registry设为npm公网源,同时为@xyz作用域绑定Azure私有源:# 默认公网源 registry=https://registry.npmjs.org/ # @xyz作用域的包从Azure私有源拉取 @xyz:registry=https://pkgs.dev.azure.com/ORGANIZATION/PROJECT/_packaging/FEED/npm/registry/ always-auth=true修正
package.json中的依赖:
移除错误的git+ssh或file路径,直接指定私有源中存在的版本号:{ "dependencies": { "@angular/animations": "~12.2.0", "@xyz/typescript-sdk": "0.0.1" // 对应私有源中的版本 } }验证Azure私有源登录(可选):
如果Azure私有源需要认证,执行以下命令登录(根据Azure提示完成认证):npm login --registry=https://pkgs.dev.azure.com/ORGANIZATION/PROJECT/_packaging/FEED/npm/registry/ --scope=@xyz
错误原因说明
之前使用的git+ssh路径存在本质错误:Azure的npm/registry/是npm仓库地址,并非Git仓库地址,npm尝试将其当作tar包解析,因此触发TAR_BAD_ARCHIVE错误。
内容的提问来源于stack exchange,提问作者cekodis681 cekodis681
相关产品推荐
相关产品推荐

