Перевод новости Rspack 1.7
Мы рады объявить о выпуске Rspack 1.7! Это последний минорный релиз в серии Rspack 1.x, и он направлен на стабилизацию существующих функций. Далее мы перейдем к Rspack 2.0.
В числе заметных изменений:
- Новые функции:
- Улучшена совместимость с плагинами SWC
- Импорт ресурсов в виде байтов
- Ленивая компиляция
- Стабилизация экспериментальных функций
- Прогресс Rstack
- Rsbuild 1.7
- Rsdoctor 1.4
- Rslib 0.19
- Rstest 0.7
- Rspress 2.0 RC
Новые возможности
Улучшена совместимость плагинов SWC
В предыдущих версиях стоимость обновления плагинов SWC Wasm была относительно высокой. Это было связано с тем, что структура AST SWC менялась от версии к версии, из-за чего существующие плагины переставали работать после обновления SWC. Авторам плагинов приходилось адаптировать свои плагины, а пользователям — обновлять зависимости синхронно, что влияло на стабильность проекта и процесс обновления.
Для решения этой проблемы мы внесли ряд улучшений совместимости в сообщество SWC, в том числе:
- Использование самоописывающейся схемы сериализации cbor вместо чувствительного к версии rkyv, что позволяет плагинам Wasm лучше адаптироваться к изменениям структуры AST.
- Введение варианта Unknown для типов перечислений в AST, что повышает отказоустойчивость при обнаружении новых полей или узлов.
В Rspack 1.7 мы обновили используемую версию SWC и внедрили эти улучшения совместимости. Теперь в большинстве случаев обновление SWC вряд ли нарушит работу существующих плагинов, созданных с использованием более старых версий SWC.
В настоящее время этот подход используется в большинстве популярных плагинов SWC Wasm. Если вы являетесь разработчиком плагина SWC Wasm, обратитесь к официальному руководству, чтобы внедрить эти изменения и снизить затраты на обслуживание в будущих версиях.
Импорт ресурсов в виде байтов
Rspack теперь поддерживает предложение Import Bytes для импорта ресурсов в виде байтов. Теперь вы можете импортировать ресурсы как Uint8Array и декодировать их с помощью TextDecoder.
Ленивая компиляция
В Rspack 1.5 мы стабилизировали функцию ленивой компиляции и включили её по умолчанию для динамически импортируемых модулей в Rsbuild.
Начиная с Rspack 1.7, CLI Rspack также включает ленивую компиляцию по умолчанию для динамически импортируемых модулей при сборке веб-приложений. Это изменение уменьшает количество модулей в первоначальной сборке, тем самым ускоряя запуск сервера разработки.
Если у вас есть особые требования, например, необходимость отладки всего вывода сборки или анализа всего графа модулей, вы можете явно отключить эту функцию, установив параметр lazyCompilation в значение false.
Стабилизация экспериментальных функций
В Rspack 1.7 мы стабилизировали несколько экспериментальных функций. Следующие возможности были проверены в производственной среде и теперь считаются стабильными, а соответствующие экспериментальные флаги устарели или включены по умолчанию:
Оптимизация встраивания констант: Эта оптимизация теперь стабильна и включена по умолчанию в производственных сборках.
- Исходная опция experiments.inlineConst устарела.
- Если вам нужно отключить это поведение, используйте optimization.inlineExports для управления им.
Оптимизация встраивания перечислений TypeScript: Эта оптимизация теперь стабильна.
- Исходная опция experiments.inlineEnum устарела.
- Используйте collectTypeScriptInfo.exportedEnum, чтобы управлять сбором информации об экспортируемых перечислениях.
- Используйте optimization.inlineExports, чтобы управлять встраиванием перечислений.
Проверка повторного экспорта типов: Эта оптимизация теперь стабильна.
- Исходная опция experiments.typeReexportsPresence устарела.
Для получения информации о настройке соответствующих параметров обратитесь к руководству по обновлению.
Прогресс Rstack
Rsbuild 1.7
Улучшения отображения ошибок
В Rsbuild теперь поддерживается отображение ошибок времени выполнения. Когда во время выполнения приложения возникает исключение, ошибка будет отображаться непосредственно в окне отображения, что помогает быстрее выявлять и диагностировать проблемы.
Эта функция отключена по умолчанию и может быть включена с помощью параметра dev.client.overlay.runtime:
Отчеты о различиях в размерах ресурсов
Rsbuild теперь поддерживает отчеты о различиях в размерах, чтобы увидеть, изменился ли размер выходных данных сборки.
При включении параметра performance.printFileSize.diff Rsbuild записывает снимок размеров ресурсов по завершении сборки. Последующие сборки будут автоматически сравнивать результаты с предыдущими и отображать изменения размеров в логах. Вы можете четко видеть, увеличился или уменьшился размер каждого файла, а также общее изменение размера, что делает его удобным для быстрого выявления регрессии размеров в процессе ежедневной разработки.
Улучшения create-rsbuild
create-rsbuild теперь включает больше готовых инструментов.
При создании проекта Rsbuild теперь можно выбрать автоматическую интеграцию Rstest в качестве фреймворка для тестирования или включить Storybook для разработки и отладки компонентов пользовательского интерфейса. Соответствующие зависимости и конфигурации будут установлены во время инициализации, что сократит затраты на повторяющуюся ручную настройку.
Rsdoctor 1.4
Новый вид древовидной карты
В Rsdoctor 1.4 представлен улучшенный вид древовидной карты. Новый дизайн взаимодействия помогает более интуитивно анализировать общую структуру пакета и соотношение размеров различных ресурсов и модулей.
В этом представлении вы можете быстро найти определенные модули или ресурсы с помощью поиска. Щелчок по модулю или ресурсу автоматически сфокусирует и увеличит масштаб соответствующей области. Двойной щелчок по модулю также может развернуть цепочку зависимостей, позволяя просматривать взаимосвязь между модулями слой за слоем, помогая определить, откуда берется размер.
Rslib 0.19
Стабилизация вывода ESM
В предыдущих версиях Rslib включал новый вывод библиотек ESM из Rspack через экспериментальную конфигурацию experiments.advancedEsm для улучшения качества вывода ESM. После проверки и доработки в нескольких версиях эта возможность теперь стабильна.
Начиная с Rslib 0.19, режим сборки Rslib включает эту функцию по умолчанию. Разработчикам не требуется дополнительная конфигурация для прямого получения артефактов ESM, которые удобны для статического анализа и полностью поддерживают разделение кода.
API JavaScript
В Rslib 0.19 представлен API JavaScript, позволяющий разработчикам программно вызывать возможности сборки Rslib в коде JavaScript.
Вот простой пример:
Для получения более подробной информации о применении обратитесь к документации API.
Rstest 0.7
Адаптеры конфигурации
В Rstest 0.7 представлена опция extends и механизм адаптеров, позволяющие напрямую повторно использовать существующие конфигурации инструментов или фреймворков. Адаптер — это функция преобразования конфигурации, которая может преобразовывать конфигурации из других инструментов в конфигурации Rstest, тем самым уменьшая накладные расходы на интеграцию Rstest.
Например, в библиотечном проекте, использующем Rslib, вы можете напрямую повторно использовать существующую конфигурацию Rslib через адаптер @rstest/adapter-rslib:
Адаптер отвечает за преобразование конфигураций различных инструментов в конфигурации Rstest (например, define, alias и т. д.), а extends отвечает за слияние преобразованной конфигурации с конфигурацией Rstest. Благодаря их объединению любой инструмент или фреймворк на основе Rspack может быть интегрирован с Rstest с минимальными затратами.
В настоящее время официально выпущен адаптер @rstest/adapter-rslib, и мы планируем выпустить больше адаптеров для взаимодействия с различными инструментами в Rstack. Вы также можете обратиться к Rstest - Adapters для написания собственных адаптеров.
Улучшенная обратная связь по тестам
В Rstest внесены многочисленные улучшения удобства использования для локальной разработки и отладки, что делает обратную связь по тестам более интуитивно понятной:
- Более раннее обнаружение зависших тестов: Rstest теперь поддерживает пометку тестовых случаев, которые долгое время не завершались во время локального запуска. Когда процесс тестирования замедляется, вы можете напрямую увидеть, какой случай выполняется и может зависнуть, вместо того, чтобы слепо ждать истечения времени ожидания теста.
- Более понятная обратная связь о сбое из-за таймаута: Когда тест завершается с ошибкой из-за таймаута, Rstest теперь отображает количество выполненных утверждений в сообщении об ошибке. Это помогает быстро определить, был ли тест выполнен частично или завис в какой-либо асинхронной логике, тем самым быстрее обнаруживая проблему.
Rspress 2.0 RC
Функция SSG-MD
В фронтенд-фреймворках, использующих динамическую отрисовку React, часто бывает сложно извлечь статическую информацию, и Rspress столкнулся с той же проблемой. Rspress позволяет пользователям повысить выразительность документа за счет динамических функций, таких как MDX-фрагменты, компоненты React, хуки и маршруты TSX. Однако при преобразовании этого динамического контента в текст Markdown возникают некоторые проблемы:
Прямой ввод MDX в AI приводит к большому количеству синтаксического шума кода и потере содержимого компонентов React.
Преобразование сгенерированного SSG HTML в Markdown часто дает плохие результаты, и качество информации сложно гарантировать.
Для решения этой проблемы в Rspress 2.0 представлена функция SSG-MD. Это новый режим отрисовки, и, как следует из названия, ключевое отличие от традиционной генерации статических сайтов (SSG) заключается в том, что он преобразует вашу страницу в файлы Markdown вместо файлов HTML и генерирует файлы llms.txt и llms-full.txt. По сравнению с традиционными подходами, такими как преобразование HTML в Markdown, SSG-MD использует более качественные источники информации во время рендеринга, например, виртуальный DOM React, поэтому он создает более качественный статический контент с большей гибкостью.
В результате сборки будет сгенерирована следующая структура:
Для пользовательских компонентов вы можете управлять их поведением при рендеринге в режиме SSG-MD с помощью переменных среды:
Это сохраняет интерактивность документа и помогает ИИ понимать семантическую информацию компонентов.
Более подробную информацию см. в: Руководстве по SSG-MD
Руководство по обновлению
Обновление плагинов SWC
Если ваш проект использует плагины SWC Wasm (например, @swc/plugin-emotion и т. д.), обновите плагины, чтобы они были совместимы с swc_core@54 или выше, иначе могут возникнуть ошибки сборки или исключения во время выполнения из-за несовместимости версий.
Подробнее см. FAQ - Несоответствие версий плагинов SWC.
Удалить устаревшую конфигурацию
Следующие экспериментальные параметры устарели и могут быть удалены напрямую:
Измените положение параметра collectTypeScriptInfo в builtin:swc-loader, удалив уровень rspackExperiments: