可以说我有一个私人的npm存储库,托管在JFrog artifactory内:
https://my-domain.com/artifactory/api/npm/my-repo
。
在此存储库中,我发布了一个npm软件包:my-package
,它可以正常运行。 my-package
对公共npm packages 具有(或更多)依赖性,例如lodash
。
但是,当我创建一个新项目并尝试安装my-package
时,出现以下错误:
$ npm install my-package --registry https://my-domain.com/artifactory/api/npm/my-repo
npm ERR! code E404
npm ERR! 404 Not Found - GET https://my-domain.com/artifactory/api/npm/my-repo/lodash - not_found
npm ERR! 404
npm ERR! 404 'lodash^4.17.11' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'my-package'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\<username>\AppData\Roaming\npm-cache\_logs\2019-04-29T12_47_51_647Z-debug.log
当我在运行npm
时指定my-package
选项时,似乎--registry
正在我的私有存储库中搜索npm install
所需的所有依赖项。但是,my-package
依赖于公共依赖性,而我的私有注册表中没有这种依赖性。
我的问题
如何从具有公共依赖性的私有注册表中安装npm软件包?也许这也只是JFrog问题?
任何帮助将不胜感激!
答案 0 :(得分:1)
通过使用以下名称指定注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo
npm试图从私有存储库位置按名称和版本解析所有必需的软件包:
domain.com/artifactory/api/npm/my-repo
。
要解决您的私有库所依赖的这些公共依赖项,您有两种选择:
Artifactory中定义的虚拟存储库 聚集来自本地和远程存储库的软件包。这使您可以访问本地托管的npm软件包和远程代理npm注册表。从为虚拟存储库定义的单个URL 中获取。
通过建立一个虚拟存储库,该虚拟存储库同时引用您的私有存储库位置和默认的公共npmjs位置 ,您只需指定上述内容即可下载私有库以及任何公共npm软件包注册表。
自从您提到JFrog
以来,我们来看看它们的融合page,它引导您完成创建虚拟存储库的过程。
但是,如果您决定使用选项2,则必须将所有必要的依赖项打包在私有存储库中。然后,您的私有库将能够正确提取其所依赖的依赖项。我建议您不要使用这种方法,因为您将复制npmjs
已经提供的工作,并且您将不得不继续更新私有存储库以包括新的库或现有库的较新版本。
希望有帮助!