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

Cut*_*nja 0 javascript web webpack dedupeplugin commonschunkplugin

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

所以,这大致是我的应用程序结构的样子 在此输入图像描述

我使用gulp和webpack,我正在尝试一些如何重复库XYZ.我想构建一个任务,通过这个嵌套的节点模块树,并构建1个通用版本的库XYZ.我怎样才能做到这一点?

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

plugins: [
            new webpack.optimize.DedupePlugin()
           // new CommonsChunkPlugin("commons", "commons.js")
        ],
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*erg 6

DedupePlugin只会重复删除完全相同的文件.您的模块可能依赖于库的不同版本,这就是为什么它可能不会总是被扣除.即使文件被删除,模块本身也不会,因此不会满足您对单个实例的要求.

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

resolve: {
  alias: {
    libraryXYZ: require('path').resolve('./node_modules/libraryXYZ'),
  },
},
Run Code Online (Sandbox Code Playgroud)

这是我制作的比较存储库,它展示了重复数据删除模块的不同方法.