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

Javascript 在深度嵌套的节点模块中消除应用程序中的重复库,javascript,web,webpack,dedupeplugin,commonschunkplugin,Javascript,Web,Webpack,Dedupeplugin,Commonschunkplugin,我有一个应用程序,可以将模块添加为节点\ U模块。现在,这些模块和应用程序使用库XYZ作为节点模块。此外,这些模块还有其他节点模块,它们有自己的库XYZ作为节点模块 这就是我的应用程序的大致结构 我使用了gulp和webpack,我正在尝试如何使用库XYZ。我想构建一个任务,它将遍历这个嵌套的节点模块树,并构建一个通用版本的库XYZ。我怎样才能做到这一点 我尝试使用deDupePlugin,这是我添加到gulp默认任务中的全部内容,但它不起作用。。有什么我错过的吗 plugins: [

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

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

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

我尝试使用deDupePlugin,这是我添加到gulp默认任务中的全部内容,但它不起作用。。有什么我错过的吗

plugins: [
            new webpack.optimize.DedupePlugin()
           // new CommonsChunkPlugin("commons", "commons.js")
        ],
或者,有没有其他方法来实现这一点?
非常感谢您提供的任何帮助

dedueplugin
只会删除完全相同的重复文件。您的模块可能依赖于库的不同版本,这就是为什么它可能不总是被重复数据消除的原因。而且,即使删除了重复文件,模块本身也不会,因此无法满足您对单个实例的要求

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

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

下面是我制作的一个示例,展示了消除模块重复数据的不同方法。

请注意,这些节点模块是从我不控制的项目中提取的。因此,没有办法改变它们。此外,拥有多个libraryXYZ实例会产生问题,因为我的应用程序的一个会话应该只有一个libraryXYZ。