当包具有公共依赖项时,专用包的npm安装失败
假设我有一个私有的npm存储库,托管在:当包具有公共依赖项时,专用包的npm安装失败,npm,npm-install,npm-registry,Npm,Npm Install,Npm Registry,假设我有一个私有的npm存储库,托管在: https://my-domain.com/artifactory/api/npm/my-repo。 在这个存储库中,我发布了一个npm包:mypackage,它构建得很好my package依赖于(或更多)公共npm,例如lodash 但是,当我创建一个新项目并尝试安装mypackage时,会出现以下错误: $npm安装我的软件包--注册表https://my-domain.com/artifactory/api/npm/my-repo npm错误!代
https://my-domain.com/artifactory/api/npm/my-repo
。
在这个存储库中,我发布了一个npm包:mypackage
,它构建得很好my package
依赖于(或更多)公共npm,例如lodash
但是,当我创建一个新项目并尝试安装mypackage
时,会出现以下错误:
$npm安装我的软件包--注册表https://my-domain.com/artifactory/api/npm/my-repo
npm错误!代码E404
npm错误!404未找到-获取https://my-domain.com/artifactory/api/npm/my-repo/lodash -找不到
npm错误!404
npm错误!404“lodash ^4.17.11”不在npm注册表中。
npm错误!404你应该让作者发布它(或者自己使用这个名字!)
npm错误!404它被指定为“我的包”的依赖项
npm错误!404
npm错误!404请注意,您也可以从
npm错误!404 tarball、文件夹、http url或git url。
npm错误!此运行的完整日志可在以下位置找到:
npm错误!C:\Users\\AppData\Roaming\npm cache\\日志\2019-04-29T12\U 47\U 51\U 647Z-debug.log
当我在运行npm安装时指定--registry
选项时,似乎npm
正在我的私有存储库中搜索my package
所需的所有依赖项。但是,mypackage
依赖于公共依赖项,而公共依赖项不在我的私有注册表中
我的问题
如何从具有公共依赖项的私有注册表安装npm包?也许这也只是一个JFrog问题
任何帮助都将不胜感激 通过使用指定注册表:--registryhttps://my-domain.com/artifactory/api/npm/my-repo
npm正在尝试从您的私有存储库位置按名称和版本解析所有必要的包:
domain.com/artifactory/api/npm/my repo
要解决私有库所依赖的这些公共依赖关系,您有两个选项:
设置虚拟Npm注册表。(建议采用这种方法)
在私有存储库中打包所有必要的依赖项
Artifactory中定义的虚拟存储库聚合本地和远程存储库中的包。这允许您从为虚拟存储库定义的单个URL访问本地托管的npm包和远程代理的npm注册表
通过设置一个同时引用您的私有存储库位置和默认公共npmjs位置的虚拟存储库,您可以通过指定上述注册表下载您的私有库以及任何公共npm包
既然您提到了JFrog
,请看一下它们的汇合点,它将引导您完成创建虚拟存储库的过程
但是,如果您决定使用选项2,则必须将所有必需的依赖项打包到您的私有存储库中。然后您的私有库将能够正确地提取它所依赖的依赖项。我建议不要使用这种方法,因为您将重复npmjs提供的工作,并且您还必须不断更新您的私有存储库,以包含新库或现有库的更新版本
希望这有帮助 还有第三个选择是。这就是我实际提出的解决方案,因为它最适合我的情况。对我来说唯一的缺点是,我不得不将我的包重命名为scope包。(@scope/…
)不确定这是否正是@ysfaran的意思,但在我的例子中,我使用的是.npmrc
,解决方案是使用以下行为我的组织范围指定私有注册表地址:@my org:registry>=https://npm.pkg.github.com/my-org
。这样,在mypackage.json
中,包@my org/my package
是唯一可以通过私有注册表检索的包,而所有其他包都是从默认的公共注册表检索的。这应该是答案,因为这是解决问题最简单的方法。然后,您可以使用@your org/your package
发布您的包,然后可以npm安装@your org/your package
。