强制依赖使用特定的子依赖版本

Posted

技术标签:

【中文标题】强制依赖使用特定的子依赖版本【英文标题】:Force dependency to use specific sub dependency version 【发布时间】:2017-04-14 13:08:01 【问题描述】:

我正在使用 webpack 和 npm 模块构建我的网站代码,并遇到以下问题:

我的代码使用 jQuery 3.1.1 并添加了一些插件。 我还使用了一个对 jQuery

如何强制所有依赖项(***和嵌套)使用一个版本的 jQuery?这样require("jquery") 总是解析为 jQuery 3.1.1。

我尝试使用 npm shrinkwrap 覆盖依赖版本,但这似乎不起作用。这是我修改后的收缩包装文件:


  "name": "example",
  "version": "0.1.0",
  "dependencies": 
    "can": 
      "version": "2.3.27",
      "from": "can@>=2.3.23 <3.0.0",
      "resolved": "https://registry.npmjs.org/can/-/can-2.3.27.tgz",
      "dependencies": 
        "jquery": 
          "version": "3.1.1",
          "from": "^3.1.1"
        
      
    
  

但是模块的依赖仍然是jQuery 2.2.4 和npm install prints npm ERR! invalid: jquery@3.1.1 /path/.../can/node_modules/jquery

也接受使用 webpack 而不是 npm 解决问题的解决方案。

【问题讨论】:

【参考方案1】:

我自己使用 webpack 别名找到了解决方案。

resolve: 
    root: __dirname,
    alias: 
        "jquery": "node_modules/jquery/src/jquery",
    

现在每个使用 require('jquery') 的模块都会加载位于别名路径下的 jquery 模块,而不管模块的 package.json 中指定的版本如何。

我暂时保留这个问题,因为这个解决方案需要 webpack,如果有一个仅 npm 的解决方案,我会很感兴趣。

【讨论】:

以上是关于强制依赖使用特定的子依赖版本的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 强制更高的包依赖版本

如何强制 Gradle 为两个依赖项设置相同的版本?

如何强制 maven 每天更新依赖的版本?

Maven - 强制使用依赖

Maven依赖导入错误的子依赖版本

更新依赖包时强制更新包版本