2026: Tailwind v4, PostCSS — память Node и воркеры на remote Mac
Для кого: фронтенд и fullstack на удалённом Mac: Tailwind CSS v4 через @tailwindcss/postcss или Vite. Пики RSS чаще приходятся на CSS-пайплайн и параллельные job’ы CI, а не на первый проход TypeScript. Ниже — таблица сценариев: NODE_OPTIONS, воркеры и каталоги кэша для runbook рядом с YAML. Внутренние материалы: кэш Vite/webpack, память Node и SSR, monorepo и Turborepo.
01 Почему растёт память в Tailwind v4 + PostCSS
Tailwind v4 обычно идёт как @tailwindcss/postcss или @tailwindcss/vite: сканирование контента и CSS-граф дают высокий RSS; два параллельных turbo run build на 16 ГБ почти удваивают пик. В логах — JavaScript heap out of memory или 137 от OOM-killer. Только увеличивать --max-old-space-size, не трогая параллелизм, часто значит уйти в swap и долгий красный билд.
02 Таблица: NODE_OPTIONS, воркеры, кэш
| Сценарий CI / SSH | Пример NODE_OPTIONS (на задачу) |
Воркеры / параллелизм | Каталоги кэша (типично) | Заметка |
|---|---|---|---|---|
Один пакет: vite build + PostCSS-плагин Tailwind v4 |
--max-old-space-size=6144 … 8192 |
1 тяжёлая сборка на хост; при 8+ P-ядрах Vite часто ок без ручного капа | node_modules/.vite, node_modules/.cache |
Сначала кап job’ов, потом heap. |
Monorepo: turbo run build — 2 пакета с CSS |
--max-old-space-size=4096 … 6144 на процесс |
turbo --concurrency=1 или 2 только если суммарный RSS проверен |
.turbo/cache, плюс кэши пакетов как в строке выше |
Не смешивать с E2E в одном слоте. |
| webpack / postcss-loader, prod-сборка | --max-old-space-size=8192 при одной задаче на 16 ГБ |
parallelism / thread-loader смотреть по CPU; старт: ≤ числа P-ядер |
node_modules/.cache/postcss-loader, node_modules/.cache |
Снижать parallelism loader’ов раньше, чем кучу. |
03 Параметры для shell и CI
В том же шаге, что и сборка (CI или SSH):
- Куча:
export NODE_OPTIONS="--max-old-space-size=8192"на одну prod-сборку при 16 ГБ; при двух процессах —4096–6144каждый или убрать параллель. - libuv (опционально):
export UV_THREADPOOL_SIZE=8≤ P-ядер; не заменяет кап бандлера. - Monorepo:
turbo run build --concurrency=1до замеров; кэш сбрасывать:node_modules/.vite,node_modules/.cache, при необходимости.turboпосле апгрейда Tailwind.
04 Safari / WebKit
После зелёного build — точечная проверка UI в Safari/WebKit на устройстве или smoke; отдельная приёмка, здесь лишь пометка в runbook.
05 FAQ
Ноутбук vs remote Mac? Иной параллелизм CI и меньше «чистой» RAM под задачу.
arm64? На Apple Silicon используйте arm64 Node — x64 под эмуляцией тяжелее по памяти и времени.
Согласуйте NODE_OPTIONS и параллелизм; кэши .vite, node_modules/.cache, .turbo чистите при обновлении Tailwind/PostCSS — так проще ловить стабильный CI на удалённом Mac в 2026 году.
Аренда / покупка Mac под Tailwind v4 и CI
Вынесите vite build и PostCSS на выделенный Mac mini M4: предсказуемая RAM и диск под кэши. Аренда или покупка без обязательного входа — тарифы, SSH или runner без конкуренции с локальным ноутбуком за память.