Astro
Astro 是一个静态站点生成器,它允许你使用 React、Vue、Svelte 等框架来构建你的网站。
为什么使用 Astro
Astro 作为一个现代的静态站点生成器,相比于 WordPress、Hugo、GitBook 和 Quarto 等工具,具有独特的优势。
Astro 的核心优势在于其卓越的性能和灵活性。默认情况下,Astro 生成的网站是零 JavaScript 的,只在必要时才加载 JS,这使得网站加载速度极快。同时,Astro 支持多种前端框架,如 React、Vue 和 Svelte,开发者可以在同一个项目中混用不同的框架,这种灵活性是其他工具难以企及的。
在开发体验方面,Astro 提供了基于组件的开发方式,支持 TypeScript,并且具有快速可靠的热更新功能。这些特性使得开发过程更加高效和愉悦。
下面是 Astro 与其他工具的简要对比:
| 特性 | 预览速度 | 灵活性 | 部署难度 | 适用场景 |
|---|---|---|---|---|
| Astro | 快 | 高(多框架支持) | 中等 | 各类网站 |
| WordPress | 非常快 | 中(插件生态) | 中等 | 博客、CMS |
| Hugo | 非常快 | 中(模板系统) | 简单 | 静态网站 |
| GitBook | 一般 | 低 | 简单 | 文档 |
| Quarto | 慢 | 中(R/Python 支持) | 中等 | 学术出版 |
相比 WordPress,Astro 更轻量,不需要管理数据库和服务器,适合构建各种静态网站。对比 Hugo,虽然 Hugo 以构建速度快著称,但 Astro 提供了更现代的开发体验和更丰富的生态系统。相较于 GitBook,Astro 的可定制性更强,能够构建更复杂的网站结构和功能。与 Quarto 相比,Astro 更适合前端开发者,支持更多的 Web 技术和框架,而不仅限于学术出版领域。总的来说,Astro 在性能、灵活性和开发体验上都有突出表现,特别适合那些需要高性能、高度定制化的现代网站项目。
快速开始
-
使用 npm 安装 Astro:
Terminal window npm create astro@latest -
启动开发服务器:
Terminal window npm run dev -
访问 http://localhost:4321 查看效果。
核心概念
Astro 的核心概念主要包括以下几个方面:
组件(Components)
Astro 组件是网站的基本构建块。它们是纯 HTML 模板,没有客户端运行时。主要特点:
- 使用类似 JSX 的语法
- 支持导入和使用其他组件
- 可以包含 JavaScript 逻辑
- 文件扩展名为
.astro
页面(Pages)
页面是放在 src/pages 目录下的特殊组件,Astro 会自动将它们转换为网站的页面。支持:
.astro文件.md/.mdx文件.html文件- 其他框架组件文件
布局(Layouts)
布局组件用于页面间共享通用的 UI 结构,比如页眉、导航栏和页脚。它们:
- 通常放在
src/layouts目录 - 可以嵌套使用
- 支持插槽(slots)机制
内容集合(Collections)
内容集合用于管理和验证相关内容文件(如博客文章):
- 在
src/content目录定义 - 支持类型安全
- 提供 API 进行查询
- 可以定义自定义 schema
路由(Routing)
Astro 使用基于文件的路由系统:
- 自动根据
pages目录结构生成路由 - 支持动态路由
- 可以通过
getStaticPaths生成静态路由
目录结构
典型的 Astro 项目目录结构如下:
.├── public/├── src/│ ├── components/│ ├── content/│ ├── layouts/│ ├── pages/│ └── styles/├── astro.config.mjs├── package.json└── tsconfig.json其中目录的作用分别为:
| 目录/文件 | 作用 |
|---|---|
public/ | 静态资源目录,存放图片、字体等不需要处理的文件,会被原样复制到构建输出目录 |
src/ | 源代码目录,包含项目的主要代码文件 |
src/components/ | 可重用的 Astro 组件、React 组件等 |
src/content/ | 内容集合目录,用于存放 Markdown/MDX 等内容文件 |
src/layouts/ | 页面布局组件,用于定义页面的整体结构 |
src/pages/ | 页面文件目录,文件路径即为最终的路由路径 |
src/styles/ | 全局样式文件目录,存放 CSS 文件 |
astro.config.mjs | Astro 配置文件,用于配置插件、集成等项目设置 |
package.json | 项目依赖配置文件 |
tsconfig.json | TypeScript 配置文件(如果使用 TypeScript) |
部署
使用 GitHub 与 Cloudflare Pages 的组合部署。具体步骤参照官方文档中的详细介绍。这样当 GitHub 上的内容更新时,Cloudflare Pages 会自动部署最新的内容。