2

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

我的代码使用 jQuery 3.1.1 并添加了一些插件。我还使用了一个对 jQuery <= 2.2.4 有子依赖的依赖项。问题是,子依赖的对象显然不知道我的 jQuery 插件,因为模块使用不同的 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打印npm ERR! invalid: jquery@3.1.1 /path/.../can/node_modules/jquery

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

4

1 回答 1

5

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

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

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

由于此解决方案需要 webpack,因此我现在将问题悬而未决,如果有仅 npm 的解决方案,我会很感兴趣。

于 2016-12-01T09:43:28.533 回答