我可以覆盖网址npm拉包吗?

时间:2016-12-08 12:41:25

标签: node.js npm

我有一个遗留项目,它取决于npm软件包的特定版本,它通过依赖关系链依赖于phantomjs的特定npm软件包,其二进制文件不再在注册位置联机。这打破了项目的构建。

不能更新软件包版本。

我可以通过手动获取所需版本的phantomjs并将其放入我系统的下载文件夹来欺骗npm,但这是一种解决方法,我想要一个更清晰的解决方案,理想情况是位于配置脚本中。

我可以在我的项目的package.json或.npmrc文件中,每次为该项目运行“npm install”时,强制npm为包@某个版本使用另一个url吗?

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是将包上传到github,然后按照NPM docs https://docs.npmjs.com/files/package.json#urls-as-dependencies

进行操作

答案 1 :(得分:0)

我发现使用npm-shrinkwrap(https://docs.npmjs.com/files/package-locks)可以实现这一点。基本上,您将一个npm-shrinkwrap.json文件与package.json一起添加到项目中。在shrinkwrap文件中,您可以覆盖package.json中列出的任何特定包 - 在该包的依赖关系链中的任何位置,您指定一个URL来从中获取依赖包。

{
  "name": "MyProject",
  "dependencies": {
    "A" : {
      "version" :"1.2.1",
      "dependencies": {
      "B": {
        "version": "https://myBForkUrl.git"
      }
    }
  }
}

如果MyProject依赖于包A,而包依赖于B,但是B没有维护并且有一个严重错误,我可以自己动摇B,修复错误并将其托管在https://myBForkUrl.git,也需要分叉A.根据NPM的文档,看起来这个覆盖可以根据需要嵌套。