多多读书
935 字
5 分钟
Astro 又是什么前端框架

一入前端深似海,不持续学习真的要被淘汰啊!这不,最近 Astro 发布了 3.0,我怀着好奇的心去看了一下,的确是个不错的框架。这个框架目前在 GitHub 上已经获得了 35k+的 star,可以算得上是一个热门的框架。里面提到的“Astro 群岛”的 Web 架构模式也非常有意思。

Astro 是什么#

Astro 是一款集多功能于一体的 Web 框架,旨在构建快速且以内容为中心的网站。“以内容为中心”的定义是指那些内容丰富的网站,例如大多数营销网站、出版网站、文档网站、博客、个人作品集以及某些电子商务网站。在构建此类网站时,Astro 拥有一些独特的优势。

Astro 采用的是服务端渲染,与 Next.JS、SvelteKit、Nuxt、Remix 等服务端渲染框架相似。然而,与其他框架构建的单页应用程序(SPA)不同,Astro 构建的是多页应用程序(MPA),这也是 Astro 具备快速性的原因之一。此外,Astro 容易学习上手,不需要太多对新技术的压力。它原生支持 React、Preact、Svelte、Vue、Solid、Lit 等热门框架组件,并且其文档非常详细,通过逐步实例指导用户如何应用。

创建 Astro 项目#

在使用 Astro 之前,请确保您的环境中安装了 Node.js 的版本不低于 18.14.1。

安装#

# 使用 npm npm create astro@latest # 使用 pnpm pnpm create astro@latest # 使用 yarn yarn create astro # 使用 bun bun create astro

启动服务#

npm run dev pnpm run dev yarn run dev bun run dev

下面是选用博客模板的效果:

Astro 语法#

Astro 以.astro后缀命名,语法与 JSX 语法相似。

--- const pageTitle = "关于我"; const skills = ["HTML", "CSS", "JavaScript", "React", "Astro", "Writing Docs"]; // 列表 const show = false; // 条件 --- <html lang="zh-cn"> <head> <meta charset="utf-8" /> <link rel="icon" type="image/svg+xml" href="/favicon.ico" /> <meta name="viewport" content="width=device-width" /> <meta name="generator" content="{Astro.generator}" /> <title>Astro</title> </head> <body> <h1>{ pageTitle }</h1> <ul> {skills.map((skill) => <li>{skill}</li>)} </ul> {show && <div>Astro 学习</div>} </body> </html>

熟悉 JSX 语法的应该很快就上手了,不过也会有一点差异。

  1. Astro 中 HTML 属性使用标准的短横线命名,而 JSX 中是驼峰式命名;
    <!-- JSX --> <div className="box" dataValue="3" /> <!-- Astro --> <div class="box" data-value="3" />
  2. 组件不要求在单个标签<div><>内;
  3. Astro 中可以使用标准的 HTML 注释或 JavaScript 风格的注释。

CSS 样式可以直接嵌套在 HTML 模板内。

<html lang="zh-cn"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>{pageTitle}</title> <!-- CSS --> <style> h1 { color: purple; font-size: 4rem; } </style> </head> </html>

Vue 集成#

Astro 支持多种不同前端框架的集成,以 Vue 为例。

安装 @astrojs/vue#

# 使用 NPM npx astro add vue # 使用 Yarn yarn astro add vue # 使用 PNPM pnpm astro add vue # 使用 bun bun astro add vue

下面是我安装过程的截图,它会自动帮你添加配置和依赖。

我写了一个简单的 Vue 组件,然后导入到 Astro 的页面内。

<script setup> const content = 'Hello World!' </script> <template> <div>{{ content }}</div> </template>

如图,正常显示 Vue 组件内容。

Astro 群岛#

Astro 支持集成不同的 UI 框架,比如 React、Svelte 和 Vue。这一特性源自 Astro 架构模式的创新,被称为“Astro 群岛”或“组件群岛”。这种“群岛架构”最早是由 Etsy 前端架构工程师 Katie Sylor-Miller 在 2019 年的一次会议上提出的。

“Astro 群岛”指的是将交互性的 UI 组件嵌入到静态 HTML 中的技术。一个页面上可以有多个岛屿,每个岛屿都是独立呈现的。你可以将这些岛屿想象成在一个由静态(不可交互)HTML 页面中的动态岛屿。这个概念有些类似于我们常说的“微前端”。

Astro 又是什么前端框架
https://fuwari.vercel.app/posts/20230922/
作者
我也困了
发布于
2023-09-22
许可协议
CC BY-NC-SA 4.0