在深层嵌套的节点模块{app}中重新复制应用程序中的库

时间:2015-10-28 18:03:42

标签: javascript web webpack dedupeplugin commonschunkplugin

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

所以,这大致是我的应用程序结构的样子 enter image description here

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

我尝试使用deDupePlugin,这是我添加到我的gulp默认任务中的所有内容并且它不起作用..我有什么遗漏吗?

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

这是我制作的comparison repository,它展示了重复数据删除模式的不同方法。