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 status、astro dev logs 和 astro 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