2026 年 1 月 16 日,Cloudflare 宣布收购 The Astro Technology Company。两个月后,Astro 6.0 正式发布。
如果你只看 changelog,这是一次常规大版本升级------Rust 编译器、字体 API、CSP 支持。但把每个特性串起来看,你会发现一条清晰的叙事线:Astro 不再满足于做"最好的静态站点生成器",它要成为边缘优先的全栈框架。
这不是猜测。从 dev server 用 Vite Environment API 重写、到 Cloudflare Workers 本地原生支持、到实验性的 Route Caching,Astro 6.0 的每一个特性都指向同一个方向:你的代码在本地怎么跑,在边缘就怎么跑。
问题是:被巨头收购的框架,上一个是 Gatsby。Astro 这次会不同吗?
一、Dev Server 重写:终结"开发没问题,上线就炸"
Astro 6 最大的变化,大多数人会忽略------因为它不是一个新 API,而是底层架构的重写。
以前的 Astro dev server 和生产构建走的是两条代码路径。开发时用 Node.js 模拟,生产时跑在 Cloudflare Workers 或 Deno 上。两套环境,两种行为,bug 藏在缝隙里。Astro 团队自己承认,这次统一"发现并修复了大量仅存在于开发环境或仅存在于生产环境的微妙 bug"。
6.0 基于 Vite 的 Environment API,让 dev server 直接运行你的生产运行时。对 Cloudflare 用户来说,这意味着本地开发时就能直接调用 cloudflare:workers 的全套 API:
javascript
---
import { env } from "cloudflare:workers";
const kv = env.MY_KV_NAMESPACE;
await kv.put("visits", "1");
const visits = await kv.get("visits");
---
<p>Visits: {visits}</p>
Durable Objects、KV、R2 Storage、环境变量------全部在本地直接可用,不需要模拟,不需要 polyfill。astro preview 也支持了,部署前就能用生产运行时验证构建产物。
这听起来像是只有 Cloudflare 用户才关心的事。但 Vite Environment API 是通用的------Bun、Deno 的适配器同样受益。核心价值是:开发环境和生产环境的行为一致性。
如果你在任何非 Node.js 运行时上部署过 SSR 应用,你知道这有多重要。
二、性能:渲染翻倍只是开始
Astro 6 在性能上下了三剂猛药。
Queued Rendering(实验性)
传统的 Astro 渲染是递归式的:遍历组件树,遇到子组件就深入,渲染完再返回。Queued Rendering 换成两阶段策略------第一遍遍历组件树生成有序队列,第二遍按队列顺序渲染。
早期基准测试:渲染速度最高提升 2 倍。
javascript
export default defineConfig({
experimental: {
queuedRendering: { enabled: true }
}
});
团队计划在 v7 将其设为默认策略。敢提前公布这个计划,说明内部测试的数据足够有说服力。
Rust 编译器(实验性)
Go 写的 .astro 编译器服役多年,现在 Rust 版接班。有趣的是,Astro 团队最初对 Rust 重写持保留态度------维护者 Emanuele Stoppa 曾说"编译器的速度从来不是问题,整个 Astro 文档站的编译只需 4 秒"。但他们还是做了,因为 Rust 编译器带来了更强的错误诊断和更可靠的输出。
安装 @astrojs/compiler-rs,一行配置开启。整个 6.x 周期会持续投入,目标是 v7 完全替换 Go 编译器。
构建速度提升
除了渲染和编译,Astro 6 在构建层面也有实打实的数据:
| 场景 | v5 → v6 | 提升幅度 |
|---|---|---|
| 100 篇 Markdown 构建 | 1000ms → 200ms | 5 倍 |
| 50 页 MDX 构建 | 800ms → 400ms | 2 倍 |
| 峰值内存占用 | 500MB → 300MB | 降低 40% |
三管齐下:渲染翻倍、编译换 Rust、构建提速 5 倍。这不是微调,是全链路的性能重写。
三、开发者体验:把"可选项"变成"默认项"
Astro 6 内置了三个以前需要手动配置或第三方插件的功能。
字体 API
以前的字体工作流:找字体 → 下载 → 放到 public 目录 → 写 @font-face → 配 preload → 生成 fallback → 调 font-display。现在:
javascript
import { defineConfig, fontProviders } from 'astro/config';
export default defineConfig({
fonts: [{
name: 'Roboto',
cssVariable: '--font-roboto',
provider: fontProviders.fontsource(),
}],
});
在组件里用 <Font /> 组件引入,自托管、回退字体生成、预加载优化全自动。支持 Google、Fontsource、Adobe、Bunny 等主流字体源,也支持本地字体。还能和 Tailwind CSS 4 的 @theme 无缝衔接。
开发时字体缓存在 .astro/fonts,生产构建复制到 _astro/fonts 并设置一年的 HTTP 缓存。这种"零配置但可深度定制"的设计,是 Astro 团队一贯的风格。
Content Security Policy
CSP 是 Astro 社区投票最高的功能需求。在 5.9 作为实验特性推出后,6.0 正式转为稳定。
javascript
export default defineConfig({
security: { csp: true }
});
一行开启,Astro 自动给页面中所有 script 和 style 生成 hash,输出 CSP headers 或 <meta> 标签。静态页、动态页、SPA 模式都支持,所有官方适配器(Cloudflare、Netlify、Node、Vercel)都兼容。
不用再手动维护 CSP 白名单------框架知道你的页面里有什么脚本,它比你更适合生成这些 hash。
Live Content Collections
内容集合一直是 Astro 的核心卖点,但以前只支持构建时获取。改个 CMS 标题?重新构建。Live Content Collections 让你在请求时实时拉取内容:
typescript
// src/live.config.ts
import { defineLiveCollection } from 'astro:content';
const updates = defineLiveCollection({
loader: cmsLoader({ apiKey: process.env.MY_API_KEY }),
schema: z.object({
slug: z.string(),
title: z.string(),
publishedAt: z.coerce.date(),
}),
});
错误处理是显式的------因为实时请求可能失败(网络超时、API 错误、数据校验失败)。这种"不替你隐藏错误"的设计哲学,和 Go 的错误处理思路类似。
四、边缘优先:Cloudflare 收购后的战略落地
如果只看上面的特性,Astro 6 是一次优秀的框架升级。但放在 Cloudflare 收购的背景下看,每个特性都有了战略意义。
Route Caching(实验性)
这是一个平台无关的服务端响应缓存系统,使用 Web 标准语义------TTL、stale-while-revalidate、基于标签的缓存失效。
javascript
---
Astro.cache.set({
maxAge: 120, // 缓存 2 分钟
swr: 60, // 过期后继续服务旧内容 1 分钟,同时后台更新
tags: ['home'], // 标签,用于精确失效
});
---
还支持内容感知的缓存失效------传入一个内容集合条目,当内容变更时自动失效对应缓存:
javascript
const product = await getEntry('products', Astro.params.slug);
Astro.cache.set(product); // 内容变了,缓存自动失效
初始版本内置了内存缓存提供者,平台特定的提供者(比如 Cloudflare KV 或 Cache API)会在后续版本推出。
Cloudflare "黄金路径"
重写后的 @astrojs/cloudflare 适配器在开发、预渲染和生产环境中都运行 workerd(Cloudflare 的开源 JS 运行时)。这意味着 Cloudflare 不是 Astro 的部署目标之一------它是第一等公民。
Astro 仍然是 MIT 开源协议,Netlify、Webflow、Wix、Sentry 仍是生态合作伙伴。但"第一方支持"和"第三方适配"的差距,用过 Gatsby + Netlify 的人都清楚。
五、Breaking Changes:敢砍旧包袱,是一种态度
Astro 6 的 breaking changes 清单不短,但每一刀都砍在该砍的地方。
Node 22+ 强制要求。 不是 20,是 22。直接跳过了 LTS 20,因为 Node 22 更快、更安全,而且让 Astro 移除了一批不再需要的 polyfill。
Zod 3 → Zod 4。 API 有不兼容变更------字符串校验器提升到顶级(z.email() 代替 z.string().email()),默认值必须匹配输出类型,错误消息的 message 改为 error。导入路径统一为 import { z } from 'astro/zod'。
Astro.glob() 移除。 用 import.meta.glob() 替代,这是 Vite 的原生方案:
javascript
// 之前
const posts = await Astro.glob('./posts/*.md');
// 之后
const posts = Object.values(
import.meta.glob('./posts/*.md', { eager: true })
);
ViewTransitions → ClientRouter。 旧组件名移除,新名字更准确地描述了它的功能。
旧版内容集合彻底移除。 所有集合必须使用 Content Layer API(v5 引入),type 属性不再支持,所有集合需要 loader。
CommonJS 配置文件不再支持。 astro.config.cjs 彻底告别,必须用 ES modules。
社区有人抱怨 breaking changes 太多,但 Astro 团队的态度很明确:宁可在大版本里大刀阔斧,也不要拖着历史包袱进入下一个阶段。 实际迁移时间据社区反馈约 1-2 小时,50 页规模的站点 90 分钟内可以完成。
六、Gatsby 的幽灵:被收购的框架会怎样?
社区里最大的担忧不是技术,是历史。
Gatsby 曾经是 React 静态站点的代名词。2023 年被 Netlify 收购,然后逐渐边缘化,最终被 sunset。一个开发者在 Hacker News 的评论区写道:
"我用了 Gatsby 很多年,直到它被 Netlify 吞掉然后日落......现在我又有了似曾相识的感觉。"
Astro 的情况不同吗?有几个关键差异:
- Cloudflare 的体量不同。 Netlify 收购 Gatsby 时自身处于增长压力下。Cloudflare 是基础设施巨头,Astro 是战略投资,不是成本项。
- Astro 的定位不同。 Gatsby 是 React 专属工具,替代品很多(Next.js、Remix)。Astro 的"岛屿架构 + 多框架支持"在市场上没有直接竞品。
- Cloudflare 需要 Astro。 Workers 平台需要一个第一方的全栈框架来对标 Vercel + Next.js。Astro 是 Cloudflare 在框架层面的战略棋子。
- MIT 协议不变。 代码仍然开源,社区仍然可以 fork。
但风险真实存在。当 Cloudflare Workers 成为"黄金路径"时,在其他平台上部署 Astro 的体验可能会逐渐落后。这不是恶意------只是资源分配的自然结果。
结语
Astro 6.0 不是一次渐进式升级,而是一份宣言。
它说:我不只是静态站点生成器。我有 SSR、有边缘运行时、有实时内容获取、有服务端缓存。我的 dev server 跑的就是生产环境,我的编译器用 Rust 写,我的渲染速度在翻倍。
从 Next.js 迁移到 Astro 的开发者报告:页面加载从 2.1 秒降到 0.4 秒,Lighthouse 分数从 78 到 100,JS 体积从 120KB 降到 8KB。这些数字说明了一件事------对内容驱动的站点来说,Astro 的"默认零 JS"哲学不是限制,是优势。
如果你在做博客、文档站、营销页、电商展示页------任何内容大于交互的场景------Astro 6.0 值得认真评估。如果你恰好在用 Cloudflare Workers,那它几乎是当前最优解。
但也别忽视 Gatsby 的教训。框架选型不只是看当下的技术指标,还要看背后的商业动机是否与你的利益对齐。
Astro 现在是 Cloudflare 的棋子。好消息是,这枚棋子正被认真打磨。