В Parcel режим production активируется автоматически при выполнении команды сборки:
parcel build entry.htmlВ этом режиме включаются все оптимизации, включая минификацию HTML,
CSS и JavaScript. Внутри пайплайна сборки Parcel переключает
process.env.NODE_ENV в значение production,
что влияет на поведение трансформеров и оптимизаторов.
HTML-файлы проходят этап оптимизации после трансформации через
@parcel/transformer-html, а затем обрабатываются
оптимизатором @parcel/optimizer-htmlnano, который отвечает
за финальную минификацию.
Обработка HTML в Parcel состоит из нескольких этапов:
Парсинг HTML
<script>,
<link>, изображения, модули)Трансформация
@parcel/transformer-htmlОптимизация
@parcel/optimizer-htmlnanoСборка результата
distМинификация HTML в Parcel основана на библиотеке htmlnano, которая применяется как стандартный оптимизатор.
Основные преобразования:
Пример преобразования:
Исходный HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> Пример страницы </title>
</head>
<body>
<!-- комментарий -->
<div class="box" id="main">
<p> Текст с лишними пробелами </p>
</div>
</body>
</html>
После минификации:
<!doctype html><html><head><meta charset="UTF-8"><title>Пример страницы</title></head><body><div class="box" id="main"><p>Текст с лишними пробелами</p></div></body></html>
htmlnanoParcel использует @parcel/optimizer-htmlnano как обёртку
над htmlnano, предоставляя стандартные пресеты оптимизации.
Конфигурация может задаваться через package.json:
{
"htmlnano": {
"preset": "default"
}
}
Возможные пресеты:
default — сбалансированная оптимизацияsafe — минимальные изменения, высокая
совместимостьampSafe — для AMP-страниц.parcelrcПоведение HTML-оптимизатора может быть переопределено через конфигурацию Parcel:
{
"extends": "@parcel/config-default",
"optimizers": {
"*.html": ["@parcel/optimizer-htmlnano"]
}
}
При необходимости можно заменить оптимизатор полностью или отключить его, удалив соответствующее правило.
Минификация может быть отключена в production-сборке:
parcel build index.html --no-optimize
{
"optimizers": {
"*.html": []
}
}
В этом случае HTML останется после трансформации, но без финального сжатия.
Parcel может встраивать небольшие ресурсы прямо в HTML:
<script> может быть минифицирован вместе с
JS<style> проходит CSS-минификациюВо время оптимизации HTML уже содержит ссылки вида:
<script src="/app.8f3a1c.js"></script>
Эти ссылки остаются неизменными, но сам HTML дополнительно сжимается.
При использовании шаблонных систем (например, EJS, Pug через трансформеры Parcel) минификация применяется уже к финальному HTML после рендеринга.
Это означает:
HTML-минификация влияет на:
Наибольший эффект достигается при:
Некоторые конструкции HTML не подлежат безопасной агрессивной оптимизации:
<pre> и <textarea>
сохраняет форматированиеParcel старается сохранять семантическую корректность документа, избегая рискованных преобразований.
HTML-минификация выполняется после:
terser)csso или cssnano)Это важно для сохранения целостности ссылок внутри HTML, так как любые изменения ассетов уже должны быть финализированы к моменту запуска htmlnano.
При необходимости глубокой кастомизации используется расширение htmlnano:
{
"htmlnano": {
"removeComments": true,
"collapseWhitespace": "conservative",
"removeRedundantAttributes": true,
"minifySvg": true
}
}
Такая конфигурация позволяет управлять уровнем агрессивности оптимизации.
В режиме разработки (parcel serve) HTML не проходит
минификацию:
Это позволяет сохранять читаемость исходного HTML при отладке структуры документа.