Astro 7 正式发布:编译器从 Go 重写为 Rust

Astro 7 正式发布。直接重做了构建链路:.astro 编译器从 Go 改写为 Rust,Markdown 和 MDX 默认启用 Rust 处理器,渲染引擎换成更快的队列模式,底层再叠加 Vite 8 和 Rolldown

Astro 的生产构建大致分成两段:先打包页面、内容和客户端组件,再执行打包后的代码,为每个预渲染页面生成 HTML。真正耗时的地方会随项目结构变化,可能是 .astro 组件编译,也可能是 Markdown 处理、打包或页面渲染。

Astro 7 路径:

  • 新的 Rust 编译器 :原来的 .astro 编译器基于 Go,新版本完全使用 Rust 重写,底层使用 Oxc 解析,并用 Lightning CSS 处理 CSS 作用域。

  • Markdown 和 MDX 转向 Rust :默认处理器改为 Sätteri,CommonMark 解析使用 pulldown-cmark,MDX 表达式解析使用 Oxc。

  • 队列式渲染成为默认方案 :渲染过程不再依赖原来的递归方式,而是边遍历边输出,减少中间列表和内存开销。官方称单看这部分约快 2.4 倍

  • 升级 Vite 8:Vite 8 用 Rust 编写的 Rolldown 统一替代原有的 esbuild 与 Rollup 组合,进一步加快打包阶段。

1、Markdown 重构内容站

Astro 默认使用 unified 生态处理 Markdown,也就是大家熟悉的 remark、rehype 以及围绕它们建立的大量 JavaScript 插件

大型文档站里,每个文件都要经过解析、多个插件遍历 AST,再序列化为 HTML。文件数量上去后,这条流水线很容易成为构建瓶颈

Astro 7 默认启用基于 Rust 的高性能 Markdown/MDX 处理器 Sätteri。它把 GFM、标题 ID、数学公式、指令、Front Matter、Wiki 链接等常见能力放进原生实现,插件还可以声明自己关心的节点类型,不必每次遍历整棵树。

官方表示,Astro 文档站和 Cloudflare 文档站切换后,单是这项改动就让构建时间减少了 1 分钟以上。

2、Astro 适配 AI 编程工具

AI 编程工具执行 astro dev 时,常见问题是命令一直不退出、重复启动服务器、忘记清理进程,或者只能反复解析终端输出判断服务是否就,

Astro 会等待服务器真正可用,再返回 URL 和进程 ID,随后把服务转入后台。开发者或 AI 编程工具还可以使用 astro dev statusastro dev logsastro dev stop 管理进程。

如果 Astro 检测到自己正运行在 AI 编程工具环境里,还会自动启用后台模式和 JSON 日志。每个开发服务器也会暴露 /_astro/status 健康检查接口。

3、Astro 7 的性能提升

  • 模板语法更严格:未闭合标签会直接报错,Rust 编译器也不会再替你自动修正无效 HTML 结构。

  • 空白处理改为 JSX 规则 :两个行内元素之间的换行可能不再产生可见空格,需要显式写出空格,或把 compressHTML 改回 true

  • 检查 Markdown 插件:依赖 remark、rehype、recma 的项目,需要迁移插件或暂时切回 unified。

  • 检查 Vite 深层集成:普通项目通常不需要改代码,但依赖 Vite 内部 API 的 Astro 集成和自定义插件,应对照 Vite 8 迁移指南测试。

  • 留意 src/fetch.ts :它现在是高级路由的保留文件名。项目中如果已经有同名文件,需要改名或调整 fetchFile 配置。

4、升级更新 Astro 和官方集成

复制代码
npx @astrojs/upgrade

Astro 7 展示的方向已经很清楚:JavaScript 框架仍然提供开发体验,底层最耗时的工作则继续交给 Rust