当包具有公共依赖项时,专用包的npm安装失败

当包具有公共依赖项时,专用包的npm安装失败,npm,npm-install,npm-registry,Npm,Npm Install,Npm Registry,假设我有一个私有的npm存储库,托管在: https://my-domain.com/artifactory/api/npm/my-repo。 在这个存储库中,我发布了一个npm包:mypackage,它构建得很好my package依赖于(或更多)公共npm,例如lodash 但是,当我创建一个新项目并尝试安装mypackage时,会出现以下错误: $npm安装我的软件包--注册表https://my-domain.com/artifactory/api/npm/my-repo npm错误!代

假设我有一个私有的npm存储库,托管在:
https://my-domain.com/artifactory/api/npm/my-repo
。 在这个存储库中,我发布了一个npm包:
mypackage
,它构建得很好
my package
依赖于(或更多)公共npm,例如
lodash

但是,当我创建一个新项目并尝试安装
mypackage
时,会出现以下错误:

$npm安装我的软件包--注册表https://my-domain.com/artifactory/api/npm/my-repo
npm错误!代码E404
npm错误!404未找到-获取https://my-domain.com/artifactory/api/npm/my-repo/lodash -找不到
npm错误!404
npm错误!404“lodash ^4.17.11”不在npm注册表中。
npm错误!404你应该让作者发布它(或者自己使用这个名字!)
npm错误!404它被指定为“我的包”的依赖项
npm错误!404
npm错误!404请注意,您也可以从
npm错误!404 tarball、文件夹、http url或git url。
npm错误!此运行的完整日志可在以下位置找到:
npm错误!C:\Users\\AppData\Roaming\npm cache\\日志\2019-04-29T12\U 47\U 51\U 647Z-debug.log
当我在运行
npm安装时指定
--registry
选项时,似乎
npm
正在我的私有存储库中搜索
my package
所需的所有依赖项。但是,
mypackage
依赖于公共依赖项,而公共依赖项不在我的私有注册表中

我的问题

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


任何帮助都将不胜感激

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

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

  • 设置虚拟Npm注册表。(建议采用这种方法)
  • 在私有存储库中打包所有必要的依赖项
  • Artifactory中定义的虚拟存储库聚合本地和远程存储库中的包。这允许您从为虚拟存储库定义的单个URL访问本地托管的npm包和远程代理的npm注册表

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

    既然您提到了
    JFrog
    ,请看一下它们的汇合点,它将引导您完成创建虚拟存储库的过程

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


    希望这有帮助

    还有第三个选择是。这就是我实际提出的解决方案,因为它最适合我的情况。对我来说唯一的缺点是,我不得不将我的包重命名为scope包。(
    @scope/…
    )不确定这是否正是@ysfaran的意思,但在我的例子中,我使用的是
    .npmrc
    ,解决方案是使用以下行为我的组织范围指定私有注册表地址:
    @my org:registry>=https://npm.pkg.github.com/my-org
    。这样,在my
    package.json
    中,包
    @my org/my package
    是唯一可以通过私有注册表检索的包,而所有其他包都是从默认的公共注册表检索的。这应该是答案,因为这是解决问题最简单的方法。然后,您可以使用
    @your org/your package
    发布您的包,然后可以
    npm安装@your org/your package