Astro 5.4

作者
Matt Kane

Astro 5.4 带来了 Markdown 中的远程图片优化、开发和预览服务器的增强安全性、Vercel ISR 排除项的正则表达式支持以及更多!

🖼️ 此次 Astro 更新带来了完美的新功能和改进,让您体验更佳

要升级现有项目,请使用自动化的 @astrojs/upgrade CLI 工具。或者,通过运行包管理器的升级命令来手动升级

# Recommended:
npx @astrojs/upgrade
# Manual:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

Markdown 中的远程图片优化

Astro 的图片服务已经可以优化您的本地 Markdown 图片。现在,它也可以对远程图片执行相同的操作!

以前,当您使用像 ![Houston](https://images.unsplash.com/photo-1530089711124-9ca31fb9e863) 这样的标准 Markdown 语法处理远程图片时,Astro 只会直接传递它们而不进行任何处理。这与 Image 组件的工作方式不同,意味着您无法利用 Astro 的图片优化功能处理存储在 CMS 或其他外部位置的图片。

在 Astro 5.4 中,图片服务现在也会自动处理和优化您的 Markdown 和 MDX 文件中的远程图片。您无需更改内容编写方式,即可获得 Astro 图片优化的所有好处。

此功能默认启用——您的 Markdown 和 MDX 文件中任何现有的远程图片都将自动优化。如果您需要针对特定图片选择退出,可以使用 HTML <img> 标签代替 Markdown 语法。

请注意,public/ 文件夹中的图片仍不会被处理,这遵循 Astro 的正常行为。

感谢 PolyWolf 的出色贡献!

Markdown 中实验性的响应式图片支持

以前,实验性的响应式图片功能仅在 ImagePicture 组件中提供完全支持。在 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 中配置此项

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.local
astro preview --allowed-hosts=hello.world.example.local,hello.example.local

您应该只将其与您控制的域名一起使用。允许第三方域名可能会带来安全风险。

如果您需要更多关于其内部工作原理的详细信息,请查阅 Vite 文档,因为实现方式是相同的。

Vercel ISR 排除项的正则表达式支持

如果您正在使用 增量静态再生 (ISR) 与 Vercel 适配器,现在您可以更灵活地定义哪些路由应从 ISR 缓存中排除。

以前,您必须在 isr.exclude 选项中明确列出要排除的每个路由。对于需要服务器端渲染的路由较多的站点来说,这可能会变得难以管理

astro.config.mjs
import vercel from '@astrojs/vercel';
export default defineConfig({
output: 'server',
adapter: vercel({
isr: {
exclude: [
'/api/users',
'/api/posts',
'/api/comments',
// ... many more API routes
]
}
})
});

现在您可以使用正则表达式来创建强大的、基于模式的排除项

astro.config.mjs
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 StoppaLuiz FerrazSarah RainsbergerHiDeooYan ThomasPolyWolfSlawek Kolodziej 以及许多其他人。

我们期待看到您使用 Astro 5.4 构建出什么!如果您有任何问题、意见或只是想打个招呼,欢迎加入 Astro Discord