7

假设我有一个私有 npm 存储库,托管在JFrog artifactory中: https://my-domain.com/artifactory/api/npm/my-repo。在这个存储库中,我发布了一个 npm package: my-package,它构建得很好。my-package对公共 npm有依赖(或更多),例如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--registrynpm installmy-package

我的问题

如何从具有公共依赖项的私有注册表安装 npm 包?也许这也只是一个 JFrog 问题?

任何帮助将不胜感激!

4

1 回答 1

2

通过指定一个注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo npm 正在尝试从您的私有存储库位置解析所有必要的包,按名称和版本domain.com/artifactory/api/npm/my-repo

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

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

Artifactory 中定义的虚拟存储库聚合来自本地和远程存储库的包。这允许您从为虚拟存储库定义的单个 URL 访问本地托管的 npm 包和远程代理的 npm 注册表。

通过设置一个引用您的私有存储库位置和默认公共 npmjs 位置的虚拟存储库,您将能够通过指定上述注册表来下载您的私有库以及任何公共 npm 包。

既然您提到JFrog了,请查看他们的 confluence页面,该页面将引导您完成创建虚拟存储库的过程。

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

希望这会有所帮助!

于 2019-04-29T14:53:46.467 回答