强制从专用注册表下载npm



在我的nodejs项目中,我必须修改其中4个节点模块,并将它们上传到我们的私人公司注册中心,以便项目在构建过程中下载修改后的版本。我通过更改package-lock.json中每个依赖项的resolved字段来实现这一点,该字段从我们的虚拟npm注册表转发下载到公共npm注册表到我们的私有注册表。

这适用于4个模块中的3个,但1个模块phantomjs-prebuilt不会下载我上传的模块。当我在安装后查看它的package.json时,它的_resolved字段显示了我在package-lock.json中输入的正确私有注册表,但该模块没有我的修改。

如果我创建了一个package.json的测试项目,该项目的唯一依赖项是phantomjs-prebuilt,并修改了要从私有注册表下载的锁文件,它将下载我上传的正确修改版本。我假设一定有一些可传递的依赖项覆盖它,但我想我可以从锁文件中看到这一点并覆盖它。phantomjs-prebuilt只在我的锁文件中出现一次,这就是我对resolved字段进行更改的地方。

最近我自己也遇到了类似的问题。如果不能选择以不同的版本发布,这可能对你没有特别的帮助,但也许其他人会像我一样偶然发现这个答案。

我所做的是在一个新版本下发布一个包的分叉版本。

因此,我派生了moddle xml 10.0.0,并将包10.0.1337发布到Artifactory中的私有注册表中。

这样,我就可以替换我们在分叉版本10.0.1337中使用的包的可传递包依赖项(使用npm强制解析(,而不会破坏任何像^10.0.0这样的约束。编辑:如果你想替换一个特定的外部版本,我认为你可以使用排除/包含过滤器。

然后,基于Artifactory的注册表将提供一个单独的虚拟注册表,其中包含npm本地包(包括我的fork(和npm远程包(默认注册表中的正常内容(设置指南。我会将本地设置配置为仅从该虚拟注册表下载。

Artifactory设置有一些陷阱(比如,你必须给所有物理存储库(npm本地和npm远程(授予读取权限,而不仅仅是虚拟存储库和这个(,但它现在对我来说很好。

(我相信除了Artifactory实现之外,类似的事情也是可能的,这个特定的东西就是我所知道的(

最新更新