多多读书
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