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

7cwmlq89  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(486)

我正在建立我的网站代码与webpack和npm模块和sutmbled后,以下问题:
我的代码使用jQuery 3.1.1并添加了一些插件,我还使用了一个依赖项,它对jQuery〈= 2.2.4具有子依赖性。问题是,子依赖项的对象显然不知道我的jQuery插件,因为模块使用了不同的jQuery版本。
如何强制所有依赖项(顶层和嵌套)使用同一版本的jQuery?这样require("jquery")总是解析为jQuery 3.1.1。
我试过使用npm包裹收缩覆盖依赖版本,但似乎不起作用。这是我修改过的包裹收缩文件:

{
  "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打印npm ERR! invalid: jquery@3.1.1 /path/.../can/node_modules/jquery
用webpack代替npm解决问题的解决方案也是可以接受的。

lf5gs5x2

lf5gs5x21#

我自己用网络包别名找到了解决方案。

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

现在,每个使用require('jquery')的模块都会加载别名路径下的jquery模块,而不管模块的package.json中指定的版本是什么。
我离开的问题,现在开放,因为这个解决方案需要webpack,我会感兴趣,如果有一个npm唯一的解决方案。

wlzqhblo

wlzqhblo2#

根据@McFarlane的回答,这是设置别名而不是使用原始路径的安全方法:

{
    resolve: {
        alias: {
            "jquery": require.resolve("jquery"),
        }
    }
}

相关问题