Найти в Дзене
Chris Roylance

Анонс релиза Rspack 1.7

Перевод новости Rspack 1.7 Мы рады объявить о выпуске Rspack 1.7! Это последний минорный релиз в серии Rspack 1.x, и он направлен на стабилизацию существующих функций. Далее мы перейдем к Rspack 2.0. В числе заметных изменений: В предыдущих версиях стоимость обновления плагинов SWC Wasm была относительно высокой. Это было связано с тем, что структура AST SWC менялась от версии к версии, из-за чего существующие плагины переставали работать после обновления SWC. Авторам плагинов приходилось адаптировать свои плагины, а пользователям — обновлять зависимости синхронно, что влияло на стабильность проекта и процесс обновления. Для решения этой проблемы мы внесли ряд улучшений совместимости в сообщество SWC, в том числе: В Rspack 1.7 мы обновили используемую версию SWC и внедрили эти улучшения совместимости. Теперь в большинстве случаев обновление SWC вряд ли нарушит работу существующих плагинов, созданных с использованием более старых версий SWC. В настоящее время этот подход используется в
Оглавление

Перевод новости Rspack 1.7

Мы рады объявить о выпуске Rspack 1.7! Это последний минорный релиз в серии Rspack 1.x, и он направлен на стабилизацию существующих функций. Далее мы перейдем к Rspack 2.0.

В числе заметных изменений:

  • Новые функции:
  1. Улучшена совместимость с плагинами SWC
  2. Импорт ресурсов в виде байтов
  3. Ленивая компиляция
  • Стабилизация экспериментальных функций
  1. Прогресс Rstack
  2. Rsbuild 1.7
  3. Rsdoctor 1.4
  4. Rslib 0.19
  5. Rstest 0.7
  6. 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.

-2

Ленивая компиляция

В Rspack 1.5 мы стабилизировали функцию ленивой компиляции и включили её по умолчанию для динамически импортируемых модулей в Rsbuild.

Начиная с Rspack 1.7, CLI Rspack также включает ленивую компиляцию по умолчанию для динамически импортируемых модулей при сборке веб-приложений. Это изменение уменьшает количество модулей в первоначальной сборке, тем самым ускоряя запуск сервера разработки.

-3

Если у вас есть особые требования, например, необходимость отладки всего вывода сборки или анализа всего графа модулей, вы можете явно отключить эту функцию, установив параметр lazyCompilation в значение false.

Стабилизация экспериментальных функций

В Rspack 1.7 мы стабилизировали несколько экспериментальных функций. Следующие возможности были проверены в производственной среде и теперь считаются стабильными, а соответствующие экспериментальные флаги устарели или включены по умолчанию:

Оптимизация встраивания констант: Эта оптимизация теперь стабильна и включена по умолчанию в производственных сборках.

  • Исходная опция experiments.inlineConst устарела.
  • Если вам нужно отключить это поведение, используйте optimization.inlineExports для управления им.

Оптимизация встраивания перечислений TypeScript: Эта оптимизация теперь стабильна.

  • Исходная опция experiments.inlineEnum устарела.
  • Используйте collectTypeScriptInfo.exportedEnum, чтобы управлять сбором информации об экспортируемых перечислениях.
  • Используйте optimization.inlineExports, чтобы управлять встраиванием перечислений.

Проверка повторного экспорта типов: Эта оптимизация теперь стабильна.

  • Исходная опция experiments.typeReexportsPresence устарела.

Для получения информации о настройке соответствующих параметров обратитесь к руководству по обновлению.

Прогресс Rstack

Rsbuild 1.7

Улучшения отображения ошибок

В Rsbuild теперь поддерживается отображение ошибок времени выполнения. Когда во время выполнения приложения возникает исключение, ошибка будет отображаться непосредственно в окне отображения, что помогает быстрее выявлять и диагностировать проблемы.

-4

Эта функция отключена по умолчанию и может быть включена с помощью параметра dev.client.overlay.runtime:

-5

Отчеты о различиях в размерах ресурсов

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

-6

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

-7

Улучшения create-rsbuild

create-rsbuild теперь включает больше готовых инструментов.

При создании проекта Rsbuild теперь можно выбрать автоматическую интеграцию Rstest в качестве фреймворка для тестирования или включить Storybook для разработки и отладки компонентов пользовательского интерфейса. Соответствующие зависимости и конфигурации будут установлены во время инициализации, что сократит затраты на повторяющуюся ручную настройку.

-8

Rsdoctor 1.4

Новый вид древовидной карты

В Rsdoctor 1.4 представлен улучшенный вид древовидной карты. Новый дизайн взаимодействия помогает более интуитивно анализировать общую структуру пакета и соотношение размеров различных ресурсов и модулей.

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

-9

Rslib 0.19

Стабилизация вывода ESM

В предыдущих версиях Rslib включал новый вывод библиотек ESM из Rspack через экспериментальную конфигурацию experiments.advancedEsm для улучшения качества вывода ESM. После проверки и доработки в нескольких версиях эта возможность теперь стабильна.

Начиная с Rslib 0.19, режим сборки Rslib включает эту функцию по умолчанию. Разработчикам не требуется дополнительная конфигурация для прямого получения артефактов ESM, которые удобны для статического анализа и полностью поддерживают разделение кода.

API JavaScript

В Rslib 0.19 представлен API JavaScript, позволяющий разработчикам программно вызывать возможности сборки Rslib в коде JavaScript.

Вот простой пример:

-10

Для получения более подробной информации о применении обратитесь к документации API.

Rstest 0.7

Адаптеры конфигурации

В Rstest 0.7 представлена ​​опция extends и механизм адаптеров, позволяющие напрямую повторно использовать существующие конфигурации инструментов или фреймворков. Адаптер — это функция преобразования конфигурации, которая может преобразовывать конфигурации из других инструментов в конфигурации Rstest, тем самым уменьшая накладные расходы на интеграцию Rstest.

Например, в библиотечном проекте, использующем Rslib, вы можете напрямую повторно использовать существующую конфигурацию Rslib через адаптер @rstest/adapter-rslib:

-11

Адаптер отвечает за преобразование конфигураций различных инструментов в конфигурации 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, поэтому он создает более качественный статический контент с большей гибкостью.

-12

В результате сборки будет сгенерирована следующая структура:

-13

Для пользовательских компонентов вы можете управлять их поведением при рендеринге в режиме SSG-MD с помощью переменных среды:

-14

Это сохраняет интерактивность документа и помогает ИИ понимать семантическую информацию компонентов.

Более подробную информацию см. в: Руководстве по SSG-MD

Руководство по обновлению

Обновление плагинов SWC

Если ваш проект использует плагины SWC Wasm (например, @swc/plugin-emotion и т. д.), обновите плагины, чтобы они были совместимы с swc_core@54 или выше, иначе могут возникнуть ошибки сборки или исключения во время выполнения из-за несовместимости версий.

Подробнее см. FAQ - Несоответствие версий плагинов SWC.

Удалить устаревшую конфигурацию

Следующие экспериментальные параметры устарели и могут быть удалены напрямую:

-15

Измените положение параметра collectTypeScriptInfo в builtin:swc-loader, удалив уровень rspackExperiments:

-16