Как стать автором
Обновить

Комментарии 8

Недавно три недели делал одну софтинку под Витой. Очень приятная штука, хотя если начинаешь кастомизировать конфиг, то половина кайфа пропадает. Так как софтинка была Svelte/Typescript, то там пришлось дописать порядочно костылей, но не суть. В принципе, на каждую проблему можно быстро нагуглить решение.

В общем, был счастлив — мгновенный ребилд и обновление стилей и разметки, даже данные в полях не пропадают, что ещё нужно девелоперу, чтобы спокойно встретить релиз? ну замечательная штука, причём бесплатно!

А потом я решил сделать сплит-чанки, ну чтобы отдельные роуты подгружались динамически из своих бандлов, общие зависимости из общих файлов, динамическая лейзи-подгрузка и вот это всё. Просто для красоты.

И оно заработало! Вообще из коробки, ничего не менял!

Полдня был счастлив, пока не проверил в прод-режиме при деплое. В проде чанки делаются, но кривые: падают даже в распоследнем хроме. Рецептов победы нет. Полифилов нет. Но есть для роллапа, который там внутри, где неонка. Но настройки нормально не пробрасываются, а если пробрасываются, то не работают.

Ну я, конечно, вытащил конфиг роллапа на предмет собрать всё на чистом ролле, отладить, а потом впихнуть его вите взад. Демка — работает. Подключаешь AWS с его когнитой и прочим амплифаем — не работает, рецептов нет, ждите апдейта от AWS, может, починят. Убил два дня на попытки завести, но там одно чинишь — второе ломается, и костыли в монитор не помещаются, а он большой.

Потом смотрю, а оно не работает и при этом конфиг уже раза в полтора побольше, чем был самый первый вебпаковский. Вернул вебпак обратно, включил ему экспериментальный кэш сборки — и вебпак стартует за те же две секунды, что и вита, и пересборка за полсекунды, и чанки нормально порезались и работают… ну апдейт страницы менее красивый, да, чаще надо полностью обновлять.

Без морали — сетап, безусловно, очень нестандартный (обучательно-развлекательный проект, специально подбирал далёкий от работы стек), и требования довольно надуманные. Но по итогу вебпак-конфиг короче, работает с той же скоростью (иногда, правда, падает — экспериментальный же режим — но редко) и собирает всё правильно. Понятно, что внутри у него та же куча костылей для import(), но он хотя бы знает, как её правильно приготовить и не сломать AWS.

Но вообще вита очень понравилась. Если без извращений, то прекрасный сборщик, мне даже больше парсела понравился.

Аналогичный опыт — долго провозился с Vite и Snowpack, пытаясь хотя бы самый простой рабочий проект завести. Но отсутствие возможности собирать нодовый сервер под SSR или без него сразу ограничило проекты до нескольких (экспериментальные плагины есть, но после долгой возни только с большими костылями завелись, плюс нет частичного обновления — серверная часть каждый раз прогоняется через бандлер, что в сотню раз медленнее). Часть из оставшихся использует асинхронные чанки, как вы описываете — с общими частями, lazy-подгрузкой, контентхешем в названиях, прелоадингом, экстрактом css-файлов и т.п. После долгой возни тоже корректно не завелись.


Остались простейшие SPA-монолиты из пет-проджектов, потому что энтерпрайз так не делается. Там да, завелось, но бандлер с автополифиллингом опять же нужен, конфигурирование через env-параметры, комменты в файлы и куча всего еще, что в Вебпаке по привычке за пару минут делается, а тут приходится "женить" дев-сборщик (довольно сырые причем оба и Vite и Snowpack — в их issues прямо поселиться пришлось) и бандлер. С этим можно справиться, что-то завелось корректно, и в дев-режиме действительно быстрее собирается и в основном хот-релоад работает лучше, чем в Вебпаке, но однозначно оно того не стоит. С кешированием и параллельностью Вебпак такие проекты тоже за 0.03-0.05с пересобирает вместо 0.01с у этих новичков. Поэтому дальше копаться не стал, подожду, пока хотя бы основные энтерпрайз-фичи будут хорошо поддерживаться и с бандлерами начнут крепко дружить.

А экспериментальный режим это какой? Не смог найти ничего такого в experimentals

"cache: {type: filesystem, buildDependencies: { config: [__filename]}}"

на тот момент было экспериментальное, сейчас не знаю, не проверял. Даже в консоли предупреждение писало и валилось время от времени.

спасибо. Дельту не улучшило, но стартовый билд стал раз в 6 лучше.

На здоровье =)

Я вот прямо сейчас на одном проекте с мультибилдами (не очень сложными, TS + SCSS + React + Tailwind) заиспользовал esbuild, просто для посмотреть, что изменилось. Как заиспользовал - написал параллельные вебпаку конфиги и сравнил. В дев-режиме разница больше, чем в пять раз, в вотче даже замерить не могу, мгновенно, в проде где-то в три раза лучше.

Единственное что не стал переносить с вебпака - ifdef-loader, он не критичен. Обошёлся условными define. А так - всё завелось, сборка в режиме либы работает. Мульти-энтри (entrypoints) и массив конфигов в вебпаке, конечно, на порядок мощнее, но для небольших проектов esbuild имеет смысл.

Критичное, на что несколько часов убил, это управление выходными бандлами. Ну когда запускается сборка сразу нескольких бандлов, а результат надо положить в одну папку, и бандлы должны хитро называться. Для этого пришлось писать простенький плагинчик, но работает.

А можете подсказать, что именно стало быстро?

Мы попробовали перескочить, в итоге:

1) отвалился hmr, который не поддерживается ни в core esbuild, ни как плагин через esbuild-loader;

2) пропала возможность использовать новый jsx transform, потому что опять же esbuild не планирует его поддерживать.

При этом время пересборки в dev-режиме осталось ровно тем же. Время продовой сборки да, сократилось аж в два раза, но вся польза от этого - незначительное сокращение времени деплоя.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий