Плагин @rollup/plugin-strip предназначен для удаления из
исходного кода заранее определённых фрагментов логики на этапе сборки
Rollup. Основная цель — исключение отладочного и вспомогательного кода
из production-бандла без необходимости ручного рефакторинга
исходников.
Удаление выполняется на уровне AST (Abstract Syntax Tree), что позволяет корректно вырезать конструкции языка, а не выполнять простую текстовую замену. Это обеспечивает безопасность трансформации и минимизирует риск поломки логики приложения.
Типичные сценарии применения:
console.* вызововdebugger инструкцийПлагин устанавливается стандартно через npm или yarn:
npm install @rollup/plugin-strip --save-dev
Подключение в конфигурации Rollup:
import strip from '@rollup/plugin-strip';
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
},
plugins: [
strip()
]
};
При подключении без параметров плагин работает в базовом режиме, удаляя только явно указанные конструкции по умолчанию (если заданы опции).
@rollup/plugin-strip проходит по AST каждого модуля и
удаляет узлы, соответствующие заданным правилам.
Удаление происходит до финальных стадий бандлинга, что позволяет:
Плагин не анализирует выполнение кода, он работает только на уровне синтаксических конструкций.
function test() {
debugger;
return 42;
}
После обработки:
function test() {
return 42;
}
console.log('debug');
console.error('error');
Результат:
(узлы полностью удаляются)
Часто применяется для функций логирования:
log('message');
debug('state');
После настройки плагина:
strip({
functions: ['log', 'debug']
})
Результат:
Позволяет удалить вызовы указанных функций.
strip({
functions: ['console.log', 'debug', 'assert']
});
Поддерживаются:
console.log)Особенность заключается в том, что удаляются именно вызовы, а не определения функций.
Удаляет инструкции debugger.
strip({
debugger: true
});
Это один из самых дешёвых по стоимости операций режимов, так как
debugger — отдельный AST-узел.
Позволяют ограничивать область применения плагина.
strip({
include: ['src/**/*.js'],
exclude: ['src/vendor/**']
});
Используется для:
Позволяет удалять labeled-statements.
strip({
labels: ['DEV', 'DEBUG']
});
Пример кода:
DEV: {
console.log('only dev');
}
После обработки блок полностью удаляется.
В некоторых конфигурациях применяется подход с условными функциями:
strip({
functions: ['invariant', 'warning']
});
Исходный код:
invariant(user != null, 'User is required');
В production-бандле вызов исчезает, остаётся только логика без проверки.
strip работает до tree-shaking, что усиливает эффект
удаления кода. Сначала убираются конкретные выражения, затем Rollup
анализирует недостижимые зависимости.
Комбинация с Terser используется для финальной минификации:
Типичная цепочка:
import strip from '@rollup/plugin-strip';
import terser from '@rollup/plugin-terser';
export default {
plugins: [
strip({
debugger: true,
functions: ['console.log']
}),
terser()
]
};
При использовании TypeScript или Babel важно учитывать порядок:
Типовой порядок:
Удаление функций возможно только безопасно, если они не влияют на состояние:
log(doSomething());
Если doSomething() имеет побочный эффект, удаление
log() может изменить поведение.
Плагин не удаляет:
const fn = console.log;
fn('test');
AST-анализ не всегда может точно определить такие случаи.
Некоторые паттерны остаются нетронутыми:
if (process.env.NODE_ENV === 'production') {
console.log('test');
}
Удаление таких блоков требует дополнительных плагинов или внешней оптимизации.
Не всегда корректно обрабатываются:
obj.console.log('test');
Такие случаи зависят от конфигурации functions.
@rollup/plugin-strip является относительно лёгким
плагином. Основная нагрузка:
На больших проектах заметный вклад в замедление сборки появляется только при большом количестве функций и сложных include/exclude паттернах.
console.* стоит ограничивать
production-сборкойdebugger удалять всегда в production без
исключенийstrip({
debugger: true,
functions: ['console.log', 'console.info', 'console.debug']
});
strip({
debugger: true,
functions: [
'console.*',
'log',
'debug',
'trace',
'assert'
],
labels: ['DEV', 'DEBUG']
});
strip({
include: ['src/**'],
exclude: ['src/tests/**'],
debugger: true
});
Плагин используется как промежуточный этап между разработкой и финальной оптимизацией. Его задача — не минификация и не трансформация модулей, а семантическое удаление ненужных конструкций, которые не должны попадать в runtime.
В современных JavaScript-сборках он часто выступает как часть цепочки оптимизации вместе с: