当包具有 public 依赖项时,私有包的 npm 安装失败
npm install of private package fails when package has public dependencies
假设我有一个私人 npm 存储库,托管在 JFrog artifactory 中:
https://my-domain.com/artifactory/api/npm/my-repo
。
在这个存储库中,我发布了一个 npm 包:my-package
,构建良好。 my-package
对 public 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\_logs19-04-29T12_47_51_647Z-debug.log
当我指定 --registry
选项时 运行 和 npm install
.但是,my-package
依赖于 public 依赖项,这些依赖项不在我的私人注册表中。
我的问题
如何从具有 public 依赖项的私有注册表安装 npm 包?也许这也只是 JFrog 的问题?
如有任何帮助,我们将不胜感激!
通过指定注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo
npm 正在尝试从您的私有存储库位置 按名称和版本解析所有必需的包:
domain.com/artifactory/api/npm/my-repo
。
要解决您的私有库所依赖的这些 public 依赖项,您有两个选择:
- 设置虚拟 Npm 注册表。 (推荐这种做法)
- 将所有必要的依赖项打包到您的私有存储库中。
Artifactory 中定义的虚拟存储库 聚合来自本地和远程存储库的包。 这允许您访问本地托管的 npm 包和远程代理的 npm 注册表来自为虚拟存储库定义的单个 URL。
通过设置一个 引用您的私有存储库位置和默认 public npmjs 位置 的虚拟存储库,您将能够下载您的私有库以及通过指定上述注册表来任何 public npm 包。
既然你提到了 JFrog
看看他们的融合 page 它会引导你完成创建虚拟存储库的过程。
但是,如果您决定使用选项 2,则必须将所有必要的依赖项打包到您的私有存储库中。然后您的私有库将能够正确地提取它所依赖的依赖项。我建议不要使用这种方法,因为您将重复 npmjs
已经提供的工作,并且您还必须不断更新您的私有存储库以包含新库或现有库的更新版本。
希望对您有所帮助!
假设我有一个私人 npm 存储库,托管在 JFrog artifactory 中:
https://my-domain.com/artifactory/api/npm/my-repo
。
在这个存储库中,我发布了一个 npm 包:my-package
,构建良好。 my-package
对 public 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\_logs19-04-29T12_47_51_647Z-debug.log
当我指定 --registry
选项时 运行 和 npm install
.但是,my-package
依赖于 public 依赖项,这些依赖项不在我的私人注册表中。
我的问题
如何从具有 public 依赖项的私有注册表安装 npm 包?也许这也只是 JFrog 的问题?
如有任何帮助,我们将不胜感激!
通过指定注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo
npm 正在尝试从您的私有存储库位置 按名称和版本解析所有必需的包:
domain.com/artifactory/api/npm/my-repo
。
要解决您的私有库所依赖的这些 public 依赖项,您有两个选择:
- 设置虚拟 Npm 注册表。 (推荐这种做法)
- 将所有必要的依赖项打包到您的私有存储库中。
Artifactory 中定义的虚拟存储库 聚合来自本地和远程存储库的包。 这允许您访问本地托管的 npm 包和远程代理的 npm 注册表来自为虚拟存储库定义的单个 URL。
通过设置一个 引用您的私有存储库位置和默认 public npmjs 位置 的虚拟存储库,您将能够下载您的私有库以及通过指定上述注册表来任何 public npm 包。
既然你提到了 JFrog
看看他们的融合 page 它会引导你完成创建虚拟存储库的过程。
但是,如果您决定使用选项 2,则必须将所有必要的依赖项打包到您的私有存储库中。然后您的私有库将能够正确地提取它所依赖的依赖项。我建议不要使用这种方法,因为您将重复 npmjs
已经提供的工作,并且您还必须不断更新您的私有存储库以包含新库或现有库的更新版本。
希望对您有所帮助!