强制依赖使用特定的子依赖版本
Force dependency to use specific sub dependency version
我正在使用 webpack 和 npm 模块构建我的网站代码,并遇到了以下问题:
我的代码使用 jQuery 3.1.1 并向其添加了一些插件。
我还使用了对 jQuery <= 2.2.4 具有子依赖性的依赖项。
问题是,子依赖的对象显然不知道我的 jQuery 插件,因为模块使用不同的 jquery 版本。
如何强制所有依赖项(顶级和嵌套)使用一个版本的 jQuery?这样 require("jquery")
总是解析为 jQuery 3.1.1.
我试过使用 npm shrinkwrap 覆盖依赖版本,但这似乎不起作用。这是我修改后的 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 解决问题的解决方案也被接受。
我自己使用 webpack 别名找到了解决方案。
resolve: {
root: __dirname,
alias: {
"jquery": "node_modules/jquery/src/jquery",
}
}
现在每个使用 require('jquery')
的模块都会加载位于别名路径下的 jquery 模块,而不管模块的 package.json.
中的指定版本如何
我暂时不问这个问题,因为这个解决方案需要 webpack,如果有仅 npm 的解决方案,我会很感兴趣。
我正在使用 webpack 和 npm 模块构建我的网站代码,并遇到了以下问题:
我的代码使用 jQuery 3.1.1 并向其添加了一些插件。 我还使用了对 jQuery <= 2.2.4 具有子依赖性的依赖项。 问题是,子依赖的对象显然不知道我的 jQuery 插件,因为模块使用不同的 jquery 版本。
如何强制所有依赖项(顶级和嵌套)使用一个版本的 jQuery?这样 require("jquery")
总是解析为 jQuery 3.1.1.
我试过使用 npm shrinkwrap 覆盖依赖版本,但这似乎不起作用。这是我修改后的 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 解决问题的解决方案也被接受。
我自己使用 webpack 别名找到了解决方案。
resolve: {
root: __dirname,
alias: {
"jquery": "node_modules/jquery/src/jquery",
}
}
现在每个使用 require('jquery')
的模块都会加载位于别名路径下的 jquery 模块,而不管模块的 package.json.
我暂时不问这个问题,因为这个解决方案需要 webpack,如果有仅 npm 的解决方案,我会很感兴趣。