Минификация в SWC представляет собой этап преобразования JavaScript-кода, при котором исходный код уплотняется: удаляются пробелы, сокращаются имена переменных, упрощаются конструкции и выполняются микро-оптимизации AST. В отличие от классических минификаторов, SWC выполняет эти операции в рамках собственного компиляционного пайплайна, что позволяет совмещать транспиляцию и оптимизацию без дополнительных инструментов.
Поле minify задаётся на верхнем уровне конфигурации SWC и
определяет, будет ли выполняться минификация, а также какие именно
стратегии оптимизации применяются.
Самый простой вариант конфигурации включает минификацию целиком:
{
"minify": true
}
Такой режим активирует стандартный набор преобразований:
В этом режиме SWC действует как полноценный минификатор без тонкой настройки поведения.
minify
Для более точного контроля используется объектная форма:
{
"minify": {
"compress": true,
"mangle": true,
"module": true,
"ecma": 2020
}
}
Каждое поле управляет отдельным аспектом оптимизации.
compress: логическая и синтаксическая оптимизация
Поле compress отвечает за преобразование структуры кода без
изменения его семантики.
Основные операции:
Пример эффекта:
// до
const a = 2 + 2;
if (false) {
console.log("x");
}
// после minify
const a = 4;
mangle: переименование идентификаторов
Поле mangle включает переименование переменных, функций и
параметров в короткие идентификаторы.
{
"minify": {
"mangle": true
}
}
Пример трансформации:
// до
function calculateTotal(price, tax) {
const totalPrice = price + tax;
return totalPrice;
}
// после
function a(b, c) {
const d = b + c;
return d;
}
Особенности работы:
module: особенности минификации модулей
Поле module указывает, что код рассматривается как ES
Module.
{
"minify": {
"module": true
}
}
Это влияет на поведение:
В модульном режиме SWC более строго анализирует границы областей видимости.
ecma: целевая версия стандарта
Поле ecma определяет, под какую версию ECMAScript
выполняется оптимизация.
{
"minify": {
"ecma": 2022
}
}
Значение влияет на:
Более высокая версия ECMAScript позволяет выполнять более точные преобразования, так как набор синтаксических ограничений меньше.
В реальных проектах используется комбинация параметров:
{
"jsc": {
"parser": {
"syntax": "ecmascript"
}
},
"minify": {
"compress": {
"unused": true,
"dead_code": true
},
"mangle": {
"toplevel": false
},
"module": true,
"ecma": 2020
}
}
Такой подход позволяет:
При использовании SWC через CLI минификация включается флагом:
swc input.js -o output.js --minify
При этом используется стандартная конфигурация, эквивалентная
minify: true, если не задан .swcrc.
Если присутствует .swcrc, приоритет отдаётся ему, и
CLI-флаг становится триггером включения режима.
Минификация выполняется после этапа трансформации AST, что означает:
minify.
Такой порядок критичен, поскольку оптимизации должны работать уже с финальной структурой кода.
Минификация SWC имеет ряд особенностей:
mangle может затруднить отладку без source
maps;
При включённых source maps сохраняется соответствие между оригинальным и преобразованным кодом, что позволяет восстанавливать стек вызовов при ошибках.
Совместное использование выглядит следующим образом:
{
"sourceMaps": true,
"minify": true
}
В этом режиме:
Source maps становятся обязательным элементом при включённом
mangle, так как без них восстановление оригинальной
структуры кода становится затруднительным.
Условно поведение minify делится на два сценария:
Разработка:
{
"minify": false
}
Продакшн:
{
"minify": {
"compress": true,
"mangle": true,
"module": true
}
}
Минификация встроена в ядро SWC и использует общий AST-процессор. Это позволяет:
Архитектурно minify является завершающим этапом
трансформационного пайплайна, тесно связанным с генерацией выходного
кода.