【问题标题】:Can I override the url npm pulls a package from?我可以覆盖 url npm 从中提取包吗?
【发布时间】:2017-07-11 22:21:07
【问题描述】:

我有一个遗留项目,它依赖于特定版本的 npm 包,它通过依赖链依赖于 phantomjs 的特定 npm 包,其二进制文件在注册位置不再在线。这会破坏项目的构建。

更新软件包版本不是一种选择。

我可以通过手动获取所需版本的 phantomjs 并将其放到我系统的下载文件夹中来欺骗 npm,但这是一种解决方法,我想要一个更干净的修复,最好是位于配置脚本中的东西。

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

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

    一种可能的解决方案是将包上传到 github 并按照 NPM 文档https://docs.npmjs.com/files/package.json#urls-as-dependencies 中的方式进行操作

    【讨论】:

    • 我认为具体的问题是包(phantomjs)是另一个依赖的依赖,所以添加一个URL/git链接到顶级依赖并没有帮助。两者之间的依赖仍然会指向错误的版本。
    【解决方案2】:

    我发现使用 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,而包 A 又依赖于 B,但 B 未维护并且存在严重错误,我可以推出自己的 B 分支,修复错误并将其托管在 https://myBForkUrl.git,而无需分叉 A。根据 NPM 的文档,看起来这个覆盖可以嵌套到必要的深度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多