如何在 package.json 中拥有来自不同注册表的 npm 依赖项?

Posted

技术标签:

【中文标题】如何在 package.json 中拥有来自不同注册表的 npm 依赖项?【英文标题】:How to have npm dependencies from different registries in the package.json? 【发布时间】:2018-03-30 05:30:34 【问题描述】:

在我的 package.json 文件中,我声明了依赖项,其中一个来自公共注册表,第二个来自私有注册表(在本例中为 Artifactory)。

"dependencies": 
        "vue": "^2.4.4", //public registry
        "ce-ui": "http://myartifactory.com/artifactory/npm-local/ce-ui/-/ce-ui-0.0.2.tgz"
      

我正在寻找使用插入符号或 tidle 声明依赖项的方法,例如

 "dependencies": 
    "vue": "^2.4.4",
    "ce-ui": "^0.0.2"
  

提前谢谢你。

【问题讨论】:

【参考方案1】:

我建议您在 Artifactory 中拥有一个虚拟存储库,其中包含两个存储库:

    使用外部存储库或公共注册表进行远程存储库。您的注册表中可能有此 URL。 本地 NPM 存储库(您的实际本地存储库)。

然后:

使用以下命令将默认注册表替换为新的本地存储库:

npm config set registry http://<ARTIFACTORY_SERVER_DOMAIN>:8081/artifactory/api/npm/your-npm-virtual-repo-name

将您的包部署到 Artifactory。第一次可以手动上传artifactory或者在每个项目中使用这个命令:

npm publish --registry http://<ARTIFACTORY_SERVER_DOMAIN>:8081/artifactory/api/npm/your-virtual-repo-name

删除 package.json 中的链接并仅替换为依赖项名称和版本,例如:

"dependencies": 
  "vue": "^2.4.4",
  "ce-ui": "^0.0.2"

更多信息在这里:

how to setting up artifactory for use with node js artifacts? Npm Registry with Jfrog Artifactory

【讨论】:

伟大的见解! @Javier C. 我有 2 个模块。来自registry.npmjs.org 和abc.pqrs.com 的一个。我想在同一个项目中使用这两个模块。我怎样才能实现它? @SantoshHegde 在您的情况下,您可以使用 npm 范围,了解更多信息:docs.npmjs.com/misc/scope【参考方案2】:

要在同一个 package.json 中引用来自不同注册表的依赖项,npm 建议使用范围

作用域包看起来像

"dependencies": 
  "@myorg/mypackage": "^1.3.0"

您可以使用 npm config 将范围与注册表关联:

npm config set @myorg:registry http://reg.example.com

一旦范围与注册表相关联,具有该范围的任何 npm install 都会从该注册表而不是默认注册表 https://registry.npmjs.org 请求包

参考: https://docs.npmjs.com/cli/v6/using-npm/scope

【讨论】:

以上是关于如何在 package.json 中拥有来自不同注册表的 npm 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Heroku 上的 package.json 从 github 安装 npm 包

mergeReleaseResources 失败,原因是“资源名称无效”(来自 package.json 的版本)

从 GitHub 的 package.json 看前端发展趋势

如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json

插入符号范围和 package-lock.json:如何使用它们获得最新的非破坏版本?

json NPM包JSON - 来自:browsenpm.org/package.json