В чем разница между производством и разработкой веб-пакетов в отношении встряхивания деревьев

в моей конфигурации веб-пакета

когда

mode: "development"

если я использую

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

or

import _ from 'lodash-es';

размер связки такой же примерно 3,27 мб.

но когда я устанавливаю режим производства в своей конфигурации веб-пакета, я получаю размер пакета 1,52 МБ для первого синтаксиса импорта, но я получаю 2,5 МБ для второго синтаксиса, что заставляет меня думать, что при разработке не происходит дрожание дерева .

Я читал в другом вопросе о переполнении стека, что lodash-es был модулем es6 и что веб-пакет мог только дрожать на них, а не общие js, и я также прочитал, что при разработке конфигурации веб-пакета мне понадобится

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

который у меня был все время.

Поэтому мне любопытно, чего мне не хватает и почему размер пакета не уменьшается в процессе разработки при использовании упомянутого плагина.

Я экспериментирую с этими изменениями в примере проекта, который я создал на https://github.com/JordanKlaers/vueWebpackPlayground


person Jordan Klaers    schedule 28.05.2019    source источник


Ответы (1)


По умолчанию механизм встряхивания дерева webpack работает на фазе минификации (по terser-webpack-plugin), эта фаза по умолчанию включена только в производственном режиме, поэтому вы не видите никаких изменений в размере пакета, когда вы находитесь в development.

Плагин модуля concat работает только на es6 modules и может улучшить процесс встряхивания дерева.

person felixmosh    schedule 28.05.2019
comment
Я попытался добавить этот плагин, о котором вы упомянули, и я до сих пор не вижу уменьшения размера пакета во время разработки, но я вижу это в процессе производства. Что-то еще мне не хватает? Я отправил свои попытки изменения в ветку treeShaking в том же репозитории выше - person Jordan Klaers; 04.06.2019
comment
Как я уже упоминал, встряхивание дерева работает только в режиме production, оно не работает в режиме разработчика. - person felixmosh; 04.06.2019
comment
но если производство и разработка отличаются из-за настройки по умолчанию, почему я не могу вручную добавлять элементы для создания аналогичной сборки? Оказывается, я смог добавить новый TerserPlugin () в плагины, а не в массив optimizer.minimizer, и кажется, что дерево трясется (если только что-то еще не происходит), потому что размер пакета для блока lodash изменился с 1.6 Мб до 90 Кб (в режиме производства он снижается до ~ 10 Кб, поэтому очевидно, что происходит больше) - person Jordan Klaers; 04.06.2019
comment
Поскольку это не очень хорошая практика для оптимизации производственной среды на dev env, почему? потому что требуется время, чтобы минимизировать (процесс, частью которого является встряхивание дерева). - person felixmosh; 04.06.2019
comment
о, извините, я не делаю этого для приложения бизнес-уровня, я просто хочу лучше понять, что делает веб-пакет, который делает производственные сборки более эффективными, путем ручного внедрения вещей в среду разработки простого проекта, с которым я играю - person Jordan Klaers; 04.06.2019
comment
чтобы поиграть таким образом, вы можете отключить все настройки по умолчанию, используя mode: none - person Jason Ritchie; 07.06.2019