在我的 nodejs 项目中,我必须修改 4 个 Node 模块并将它们上传到我们的私有(private)公司注册中心,这样项目才能在构建期间下载修改后的版本。我通过更改 package-lock.json
中的 resolved
字段来实现这一点,为我们的虚拟 npm 注册表中的每个依赖项将下载转发到公共(public) npm 注册表到我们的私有(private)注册表。
这适用于 4 个模块中的 3 个,但是 1 个模块 phantomjs-prebuilt
不会下载我上传的模块。当我在安装后查看它的 package.json 时,它的 _resolved
字段显示了我在 package-lock.json
中输入的正确私有(private)注册表,但是该模块没有我的修改.
如果我使用 package.json
创建一个测试项目,该项目将 phantomjs-prebuilt
作为其唯一依赖项并修改锁定文件以从私有(private)注册表下载,它将下载我上传的正确修改版本。我假设一定有一些传递依赖性覆盖它,但我想我可以从锁定文件中看到它并覆盖它。 phantomjs-prebuilt
只在我的锁定文件中出现一次,这就是我对 resolved
字段进行更改的地方。
最佳答案
最近我自己也遇到了类似的问题。如果不能选择以不同的版本发布,这可能对您没有帮助,但也许其他人像我一样偶然发现了这个答案。
我所做的是在新版本下发布一个包的 fork 版本。
因此,我 fork 了 moddle-xml 10.0.0,并将一个包 10.0.1337 发布到我们在 Artifactory 中的私有(private)注册表中。
那样的话,我可以用 fork 版本 10.0.1337(使用 npm-force-resolutions )替换我们使用的包的传递包依赖项,而不会破坏任何限制,例如 ^10.0.0
。
编辑:如果您想替换特定的外部版本,我认为您可以使用排除/包含过滤器。
然后,基于 Artifactory 的注册表将提供一个虚拟注册表,其中包含 npm-local 包(包括我的 fork)和 npm-remote 包(来自默认注册表的正常内容)setup guide . 我会将我的本地设置配置为仅从该虚拟注册表下载。
Artifactory 设置有一些缺陷(例如,您必须授予对所有物理存储库(npm-local 和 npm-remote)的读取权限,而不仅仅是虚拟存储库和 this one),但它运行良好现在对我来说。
(我确信除了 Artifactory 实现之外,这样的事情是可能的,这个特殊的事情只是我所知道的)
关于node.js - 强制从私有(private)注册表下载 npm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53752069/