在深度嵌套的节点模块中删除应用程序中的重复库

De-Duplicate libraries in app within deeply nested node modules

我有一个应用程序,我可以在其中添加模块 node_modules。现在,这些模块和应用程序使用库 XYZ 作为节点模块。此外,这些模块还有其他节点模块,这些模块有自己的库 XYZ 作为节点模块。

所以,这就是我的应用程序的大致结构

我使用 gulp 和 webpack,我正在尝试使用 de-duplicate 库 XYZ。我想构建一个任务来遍历这个嵌套的节点模块树,并构建一个通用版本的库 XYZ。我怎样才能做到这一点?

我尝试使用 deDupePlugin,这是我添加到我的 gulp 默认任务的所有内容,但它没有用。我有什么遗漏吗?

plugins: [
            new webpack.optimize.DedupePlugin()
           // new CommonsChunkPlugin("commons", "commons.js")
        ],

或者,还有其他方法可以实现吗? 任何帮助将不胜感激

DedupePlugin 只会删除完全相等的文件。您的模块可能依赖于不同版本的库,这就是为什么它可能并不总是被重复数据删除的原因。即使文件被去重,模块本身也不会,所以你对单个实例的要求不会得到满足。

您可以使用 resolve.alias 将所有 require('libraryXYZ') 调用重定向到同一个顶级实例。

resolve: {
  alias: {
    libraryXYZ: require('path').resolve('./node_modules/libraryXYZ'),
  },
},

这是我制作的 comparison repository 展示了对模块进行重复数据删除的不同方法。