【问题标题】:Webpack dedupe webpack bundleWebpack 重复数据删除 webpack 包
【发布时间】:2017-05-15 13:38:25
【问题描述】:

webpack 是否会对已经与 webpack 捆绑的包进行重复数据删除?

例如, | Webpack bundle 1 | |------------------| | react@15.5 | | jquery@3.0 |

| Webpack app bundle | |--------------------| | react@15.5 | | jquery@3.1 | | Webpack bundle 1 |

Webpack 应用程序包会包含 2 个 react@15.5 副本吗? Webpack app bundle 会包含 2 个 jquery 副本吗?

【问题讨论】:

    标签: webpack dedupeplugin


    【解决方案1】:

    这一切都归功于你给 webpack 的配置。 如果您有两个不相互通信的入口点并且都导入 jquery 并做出反应,那么答案是肯定的,您将在两个包中都有这些库。不过,您可以使用CommonsChunkPlugin 轻松创建供应商捆绑包。这是一个如何将供应商模块放在一个单独的块中的示例,该块将由两个入口点使用:

    new webpack.optimize.CommonsChunkPlugin({
        name: "vendor",
        minChunks: function (module) {
        return module.context && module.context.indexOf("node_modules") !== -1;
      }
    })
    

    这样,node_modules 中的所有模块都将导出到一个名为 vendor 的包中。

    【讨论】:

    • 感谢您的评论。假设我无法控制捆绑包 1。我的唯一入口点是 Webpack 应用捆绑包。
    • 如果你对第一个包没有任何控制权,那么 webpack 不知道某些供应商已经在第一个包中。我可以建议的是在 first bundle 中使用 expose-loader ( link ) 并在窗口对象中公开您需要的供应商。在第二个捆绑包中,您可以在 第二个捆绑包 中使用 externals (link) 选项
    猜你喜欢
    • 2018-12-09
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2021-02-02
    • 1970-01-01
    • 2018-04-05
    • 2016-08-23
    相关资源
    最近更新 更多