【问题标题】:What is different between webpack production and development regarding tree shaking关于 tree shaking 的 webpack 生产和开发有什么不同
【发布时间】:2019-10-14 11:57:18
【问题描述】:

在我的 webpack 配置中

什么时候

mode: "development"

如果我使用

import { pick, flattenDeep, chunk, fromPairs } from 'lodash-es';

import _ from 'lodash-es';

包大小相同,约为 3.27 mb。

但是当我在 webpack 配置中将模式设置为生产时,第一个导入语法的包大小为 1.52mb,但第二个语法我得到 2.5mb,这使我相信在开发中摇树没有发生。

我在另一个堆栈溢出问题上读到,lodash-es 是一个 es6 模块,webpack 只能在这些模块上进行树抖动,而不是常见的 js,我还读到了在开发中我需要的 webpack 配置

plugins: [
    new webpack.optimize.ModuleConcatenationPlugin()
],

我一直都有。

所以我很好奇我缺少什么以及为什么在使用提到的那个插件时捆绑包大小没有减少。

我正在https://github.com/JordanKlaers/vueWebpackPlayground创建的示例项目中试验这些更改

【问题讨论】:

    标签: webpack development-environment production tree-shaking


    【解决方案1】:

    默认情况下,webpack 的 tree-shaking 机制工作在 minification 阶段terser-webpack-plugin),这个阶段默认只在 production 模式下启用,因此,你在development 上看不到包大小的任何变化。

    Module concat 插件仅适用于es6 modules,它可以改善摇树过程。

    【讨论】:

    • 我尝试添加您提到的那个插件,但在开发时我仍然没有看到包大小减小,但在生产时我会这样做。我还缺少什么吗?我已将我尝试的更改推送到上面同一存储库中的分支“treeShaking”
    • 正如我所提到的,tree-shaking 仅在 production 模式下有效,在 dev 模式下无效
    • 但是如果生产和开发由于默认设置而不同,为什么我不能手动添加东西来产生类似的构建?原来我能够在插件中添加新的 TerserPlugin(),而不是在 optimization.minimizer 数组中,并且似乎做树抖动(除非完全发生其他事情),因为 lodash 块的包大小从 1.6 Mb 到 90 Kb(通过模式生成,它会下降到 ~10Kb,所以显然会发生更多)
    • 因为这不是在开发环境上启用生产优化的好习惯,为什么?因为它需要时间来缩小(摇树的过程是其中的一部分)。
    • 要以这种方式玩,您可能需要使用 mode: none 禁用所有默认设置
    猜你喜欢
    • 2018-05-19
    • 2019-02-14
    • 2016-12-28
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2017-09-05
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多