,假设我有一个私人NPM存储库,托管在Jfrog Artifactory中: https://my-domain.com/artifactory/api/npm/my-repo
。在此存储库中,我发布了一个NPM软件包: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>AppDataRoamingnpm-cache_logs2019-04-29T12_47_51_647Z-debug.log
看来,当我在运行npm install
时指定--registry
选项时,my-package
在我的私人存储库中似乎在搜索CC_7。但是,my-package
取决于公共依赖性,而公共依赖性不在我的私人注册表中。
我的问题
如何从具有公共依赖性的私人注册表中安装NPM软件包?也许这也是一个JFrog问题?
任何帮助将不胜感激!
通过使用以下方式指定注册表:--registry https://my-domain.com/artifactory/api/npm/my-repo
npm试图从您的私人存储库位置:通过名称和版本来解决所有必要的软件包: domain.com/artifactory/api/npm/my-repo
。
解决这些公共依赖性,您的私人图书馆依赖您有两个选择:
- 设置虚拟NPM注册表。(推荐这种方法(
- 包装您的私人存储库中的所有必要依赖项。
a 虚拟存储库在文物中定义的聚合来自本地和远程存储库中的汇总软件包。这允许您访问本地托管的NPM套件和远程代理NPM NPM注册表从为虚拟存储库定义的单个URL 。
通过设置一个虚拟存储库,该存储库参考您的私人存储库位置和默认公共NPMJS位置您将可以通过指定上述上述提及的任何公共NPM软件包下载您的私人库以及任何公共NPM软件包注册表。
由于您提到了JFrog
,请查看他们的Confluence页面,该页面引导您完成创建虚拟存储库的过程。
但是,如果您决定使用选项2,则必须在私有存储库中包装所有必要的依赖项。然后,您的私人图书馆将能够正确地拉出其依赖的依赖关系。我建议您不要使用这种方法,因为您将重复npmjs
提供的工作,您还必须继续更新您的私人存储库,以包括新的库或现有库的新版本。
希望这会有所帮助!
我的解决方案...
涉及更新我的.npmrc
文件:
我更改了registry=https://npm.pkg.my-domain.com
到@my-private-scope:registry=https://npm.pkg.my-domain.com
这就是为什么
在其中,我指定了 registry=https://npm.pkg.my-domain.com
(接着是我的身份令牌(,以便可以从 @my-private-scope范围导入一个私人软件包。但是,由于我离开了@my-private-scope:
部分,因此我正在将URL更改为所有 decencies,而不仅仅是我私人组织的一部分。我进行了更改,以指定仅在该范围下的依赖项的MyDomain URL。