如何在 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