我有一个应用程序,我可以在其中添加模块作为node_modules。现在,这些模块和应用程序使用库XYZ作为节点模块。此外,这些模块还有其他节点模块,它们有自己的库XYZ作为节点模块。
我使用gulp和webpack,我正在尝试de-duplicate库XYZ。我想构建一个任务,通过这个嵌套的节点模块树,并构建1个通用版本的库XYZ。我怎样才能做到这一点?
我尝试使用deDupePlugin,这是我添加到我的gulp默认任务中的所有内容并且它不起作用..我有什么遗漏吗?
plugins: [
new webpack.optimize.DedupePlugin()
// new CommonsChunkPlugin("commons", "commons.js")
],
或者,还有其他方法可以实现吗? 任何帮助将非常感谢
答案 0 :(得分:6)
DedupePlugin
只会重复删除完全相同的文件。您的模块可能依赖于库的不同版本,这就是为什么它可能不会总是被扣除。即使文件被删除,模块本身也不会,因此不会满足您对单个实例的要求。
您可以使用resolve.alias
将所有require('libraryXYZ')
次调用重定向到同一顶级实例。
resolve: {
alias: {
libraryXYZ: require('path').resolve('./node_modules/libraryXYZ'),
},
},
这是我制作的comparison repository,它展示了重复数据删除模式的不同方法。