在深度嵌套的节点模块中删除应用程序中的重复库
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 展示了对模块进行重复数据删除的不同方法。
我有一个应用程序,我可以在其中添加模块 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 展示了对模块进行重复数据删除的不同方法。