Astro 5.4 带来了 Markdown 中的远程图片优化、开发和预览服务器的增强安全性、Vercel ISR 排除项的正则表达式支持以及更多!
🖼️ 此次 Astro 更新带来了完美的新功能和改进,让您体验更佳
要升级现有项目,请使用自动化的 @astrojs/upgrade
CLI 工具。或者,通过运行包管理器的升级命令来手动升级
# Recommended:npx @astrojs/upgrade
# Manual:npm install astro@latestpnpm upgrade astro --latestyarn upgrade astro --latest
Markdown 中的远程图片优化
Astro 的图片服务已经可以优化您的本地 Markdown 图片。现在,它也可以对远程图片执行相同的操作!
以前,当您使用像 
这样的标准 Markdown 语法处理远程图片时,Astro 只会直接传递它们而不进行任何处理。这与 Image
组件的工作方式不同,意味着您无法利用 Astro 的图片优化功能处理存储在 CMS 或其他外部位置的图片。
在 Astro 5.4 中,图片服务现在也会自动处理和优化您的 Markdown 和 MDX 文件中的远程图片。您无需更改内容编写方式,即可获得 Astro 图片优化的所有好处。
此功能默认启用——您的 Markdown 和 MDX 文件中任何现有的远程图片都将自动优化。如果您需要针对特定图片选择退出,可以使用 HTML <img>
标签代替 Markdown 语法。
请注意,public/
文件夹中的图片仍不会被处理,这遵循 Astro 的正常行为。
感谢 PolyWolf 的出色贡献!
Markdown 中实验性的响应式图片支持
以前,实验性的响应式图片功能仅在 Image
和 Picture
组件中提供完全支持。在 Astro 5.4 中,我们也将此支持扩展到了 Markdown 和 MDX 文件!
当您在 Astro 配置中使用 experimental.responsiveImages
选项时,Astro 现在将为 Markdown 和 MDX 文件中的图片生成响应式图片,并应用正确的属性和样式以使其具有响应性。
再次感谢 PolyWolf,他也贡献了此功能!
开发和预览服务器的允许主机列表
为增强安全性,Astro 5.4 引入了一个新选项,用于限制您的开发和预览服务器将响应的主机名。
新的 server.allowedHosts
配置选项允许您指定一个允许的主机名列表。这将检查传入请求的 Host
头部,并且只响应具有匹配主机名的请求。这有助于防止 DNS 重绑定攻击,例如 GHSA-vg6x-rcgg-rjx6。
您可以在 astro.config.mjs
中配置此项
import {defineConfig} from "astro/config";
export default defineConfig({ server: { allowedHosts: ['hello.world.example.local', 'hello.example.local'] }})
或直接在 CLI 中
astro dev --allowed-hosts=hello.world.example.local,hello.example.localastro preview --allowed-hosts=hello.world.example.local,hello.example.local
您应该只将其与您控制的域名一起使用。允许第三方域名可能会带来安全风险。
如果您需要更多关于其内部工作原理的详细信息,请查阅 Vite 文档,因为实现方式是相同的。
Vercel ISR 排除项的正则表达式支持
如果您正在使用 增量静态再生 (ISR) 与 Vercel 适配器,现在您可以更灵活地定义哪些路由应从 ISR 缓存中排除。
以前,您必须在 isr.exclude
选项中明确列出要排除的每个路由。对于需要服务器端渲染的路由较多的站点来说,这可能会变得难以管理
import vercel from '@astrojs/vercel';
export default defineConfig({ output: 'server', adapter: vercel({ isr: { exclude: [ '/api/users', '/api/posts', '/api/comments', // ... many more API routes ] } })});
现在您可以使用正则表达式来创建强大的、基于模式的排除项
import vercel from '@astrojs/vercel';
export default defineConfig({ output: 'server', adapter: vercel({ isr: { exclude: [ '/preview', // Specific route '/auth/[page]', // Dynamic route /^\/api\/.+/, // RegExp: all routes starting with /api/ ] } })});
这使得大规模管理 ISR 排除项变得更加容易,特别是对于拥有大量 API 路由或动态页面的站点。
感谢 Slawek Kolodziej 的贡献!
新的配置助手和构建选项
Astro 5.4 引入了新的 API,使得以编程方式使用 Astro 变得更加容易,尤其适用于测试和脚本编写场景。
配置助手
现在从 astro/config
中导出了两个新的助手函数
mergeConfig
:允许您在基础配置之上合并部分定义的 Astro 配置,遵循与集成可用的updateConfig
函数相同的规则。validateConfig
:验证给定值是否为有效的 Astro 配置,并根据需要填充默认值。
这些助手对于集成作者以及编写需要以编程方式操作 Astro 配置的脚本的开发者特别有用。
编程构建选项
build
API 现在接受第二个可选的 BuildOptions
参数,其中包含两个选项
devOutput
:当设置为true
时,输出一个基于开发的构建,类似于在astro dev
中转换的代码。默认值为false
。teardownCompiler
:控制是否在构建后拆除编译器 WASM 实例。默认值为true
。
这些选项在以编程方式运行 Astro 构建时提供了更多控制,特别适用于测试场景或自定义构建管道。
错误修复
一如既往,自 5.3 版本发布以来,我们一直在努力修复问题。详情请参阅更新日志。
鸣谢
感谢所有为本次发布做出贡献的人,包括 Emanuele Stoppa、Luiz Ferraz、Sarah Rainsberger、HiDeoo、Yan Thomas、PolyWolf、Slawek Kolodziej 以及许多其他人。
我们期待看到您使用 Astro 5.4 构建出什么!如果您有任何问题、意见或只是想打个招呼,欢迎加入 Astro Discord。