Astro v0.23.0 выпущен с новыми функциями:
- Dynamic File Routes
- Automatic XSS Protection
- New
set:htmlandset:textdirectives - Safe access to sensitive environment variables
- Better builds with Vite v2.8
- Better stability with @astro/compiler v0.11
- Better build performance with
--experimental-static-builds
Dynamic File Routes
Теперь можно строить динамические не-HTML файлы через file routes Astro. JSON, XML, даже изображения при сборке. Одна из самых запрашиваемых функций с ранних дней Astro!
Создайте JS или TS файл в src/pages. File routes используют file-based router — включите расширение финального файла в имя.
// Outputs: /builtwith.json
// File routes export a get() function, which gets called to generate the file.// Return an object with `body` to save the file contents in your final build.export async function get() { return { body: JSON.stringify({ name: "Astro", url: "https://astro.build/", }), }}Только с флагом --experimental-static-build. Документация.
Automatic XSS Protection
Astro v0.23 начинает миграцию к автоматическому экранированию HTML в выражениях шаблона. Защита от случайной инъекции недоверенного HTML. Без неё — XSS-атаки с выполнением чужого кода.
<!-- Examples of untrusted HTML injection --><div>{`<span>Hello, dangerous HTML</span>`}</div><div>{`<script>alert('oh no');</script>`}</div><div>{untrustedHtml}</div>React и другие UI-библиотеки сделали XSS редкостью. Astro стремится к той же планке — встроенная XSS-защита без усилий.
Для миграции v0.23 логирует предупреждение при неэкранированном HTML в выражении. В следующей версии выражения всегда экранируют содержимое.
New set:html and set:text directives
Две директивы для явной HTML-инъекции. Прямая установка HTML рискованна, но иногда нужна. set:html — как dangerouslySetInnerHTML в React.
<!-- Examples of explicit HTML setting --><div set:html={`<span>Hello, trusted or already escaped HTML</span>`} /><div set:html={`<script>alert('oh yes');</script>`} /><div set:html={trustedOrAlreadyEscapedHtml} />Без обёртки <div> — set:html на Fragment:
- {`<span>Hello, dangerous HTML</span>`}+ <Fragment set:html={`<span>Hello, trusted or already escaped HTML</span>`} />set:text устанавливает текст элемента, как .text в браузере. Вместе — больше контроля над выводом Astro.
Safe access to sensitive environment variables
Vite загружает только переменные с префиксом PUBLIC_. Логично в браузере — защита от утечки секретов. Но приватные переменные были недоступны даже локально в SSR-компонентах Astro.
В Astro v0.23 import.meta.env даёт доступ к приватным
переменным окружения в Astro и при локальном или серверном рендере. На клиенте
Astro по-прежнему защищает — только PUBLIC_ попадают во frontend.
// DB_PASSWORD is only available when building your site.// If any code tried to run this in the browser, it will be empty.const data = await db(import.meta.env.DB_PASSWORD)
// PUBLIC_POKEAPI is available anywhere, thanks to the PUBLIC_ prefix!const data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`)См. документацию Environment Variables.
Better builds with Vite v2.8
Astro v0.23 с обновлением Vite — новые функции и стабильность. Улучшена обработка npm-пакетов. Changelog Vite.
Better stability with @astro/compiler v0.11
Обновление компилятора — заметные улучшения производительности и стабильности. Changelog compiler.
Better build performance
--experimental-static-build выше — некоторые функции только за флагом. Флаг не нов в v0.23, но улучшается к официальному релизу. «Static build» скоро станет поведением по умолчанию.
Попробуйте --experimental-static-build и оставьте feedback в Discord. Пост Scaling Astro to 10,000+ Pages.
👋
Спасибо за чтение! Twitter — новости Astro.
Если дочитали — Discord. ;)