当软件包具有公共依赖项时,私有软件包的npm安装失败

时间:2019-04-29 13:13:19

标签: npm npm-install npm-registry

可以说我有一个私人的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问题?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

通过使用以下名称指定注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo npm试图从私有存储库位置按名称和版本解析所有必需的软件包domain.com/artifactory/api/npm/my-repo

要解决您的私有库所依赖的这些公共依赖项,您有两种选择:

  1. 设置虚拟Npm注册表。 (推荐这种方法)
  2. 在私有存储库中打包所有必要的依赖项。

Artifactory中定义的虚拟存储库 聚集来自本地和远程存储库的软件包。这使您可以访问本地托管的npm软件包和远程代理npm注册表。从为虚拟存储库定义的单个URL 中获取。

通过建立一个虚拟存储库,该虚拟存储库同时引用您的私有存储库位置和默认的公共npmjs位置 ,您只需指定上述内容即可下载私有库以及任何公共npm软件包注册表。

自从您提到JFrog以来,我们来看看它们的融合page,它引导您完成创建虚拟存储库的过程。

但是,如果您决定使用选项2,则必须将所有必要的依赖项打包在私有存储库中。然后,您的私有库将能够正确提取其所依赖的依赖项。我建议您不要使用这种方法,因为您将复制npmjs已经提供的工作,并且您将不得不继续更新私有存储库以包括新的库或现有库的较新版本。

希望有帮助!