ReactJS использует Webpack для объединения своего производственного кода.
В Webpack есть плагин под названием DefinePlugin , который ReactJS использует . Этот плагин заменяет буквальные значения в коде, значениями, которыми вы можете управлять. Очень похоже на встраивание компилятора.
Либо я не понимаю название этого плагина, либо это просто неудачный выбор. В моем исследовании, пытаясь выяснить, как ReactJS очищает свой производственный код, я не раз пропускал вызов new webpack.DefinePlugin()
. Кроме того, мое отсутствие опыта работы с Webpack не помогло.
Как уже упоминалось на странице плагина это многоэтапный процесс:
1. Оригинальный код :
if (!PRODUCTION) {
console.log('Debug info');
}
if (PRODUCTION) {
console.log('Production log');
}
2. Встраивание осуществляется с помощью плагина Define :
if (!true) {
console.log('Debug info');
}
if (true) {
console.log('Production log');
}
3. Шаг минификации и окончательный результат
console.log('Production log');
Этап минимизации / оптимизации выполняется с помощью инструмента Terser , который представляет собой Webpack с использованием . Terser выглядит как форк UglifyJS , и он тоже имеет возможность удалять мертвый код .
Итак, это:
- Сборка ReactJS
- React настраивает Webpack с
DefinePlugin process.env.NODE_ENV = 'production'
- Вкладка веб-пакета, сделанная
DefinePlugin
- Оптимизация веб-пакетов
- Веб-плагин Terser
- Terser окончательно удаляет мертвый код
Я хотел бы поблагодарить @romellem за то, что он направил меня в правильном направлении через эти джунгли.
PS: Уважаемые будущие читатели, я написал это 10 мая 2019 года. Мои выводы, вероятно, скоро устареют.