如何强制 WebPack 使用一个版本的模块(而不是 6 个不同的版本?)

How to force WebPack to use one version of module (instead of 6 different versions?)

在我们的项目中 Webpack-bundle-analyzer 插件说包使用特定模块(js 文件)6 次。

制作项目的最佳方法是什么,因为它只使用一个(而不是多个)?我知道它们可能来自依赖项的依赖项,但是应该如何解决这样的问题?


我可以手动检查我的应用程序是否存在可能的代码中断,但目标肯定是使用一个 bn.js。我们的 package.json 不直接将其包含在任何依赖项中。

出现这种情况可能是因为您的应用(或其依赖项)需要同一库的不同版本。

不建议通过破解某些 Webpack 的配置来“强制”使用相同的版本(这是可能的)。 语义版本控制是有意义的,如果 lib 增加了一个主要版本,这意味着它包含 重大更改

更好的方法是手动调整库(或其使用者)的版本。

你可以 运行 yarn why lib-namenpm ls lib-name 将打印出一个正在使用 lib 的依赖项列表以及在哪个版本,这将帮助你升级依赖项为了对齐版本。

如果你还想强制,可以查看这些解决方案https://github.com/webpack/webpack/issues/6505

  1. 使用yarn resolutions只安装一个版本。
  2. 使用 webpack 别名,将 lib-name 别名到特定路径(每个不同的版本都安装在消费者 node_modules 文件夹中)
  3. 通过
  4. 强制 webpack 仅从应用 node_modules 解析
// webpack.config.js
module.exports = {
  ...
  modules: [
    path.join(__dirname, '../node_modules')
  ]
  ...
}