跳到内容

个人网站迁移到 Astro

发布于:2023年2月22日,最后更新:2023年11月28日
Cover

toc

背景

旧版的个人网站使用 Gridsome 构建,已经运行了 2 年了。

虽然使用 Vue 做了一些定制,但是整体还是受限于 Gridsome。

再加上想学点新鲜玩意,所以就花点时间进行了升级。

框架

新建工程实际动手对比了 Next.jsAstro,最后选择了 Astro。

Astro 较好的地方

Next.js 较好的地方

引用官方网站的介绍:

Astro 是一个一体化的 Web 框架,用于构建快速以内容为中心的网站。

关键特性:

Astro 实现了 Islands Architecture

Lighthouse 打分

Lighthouse

* 其中 Best Practices打分 92 是因为百度统计 js 的问题

部署

强烈推荐 Vercel 这个平台,在准备好仓库的前提下,只需要 5 分钟就可部署好。

Vercel 是一个站点托管平台,提供 CDN 加速,同类的平台有 Netlify 和 Github Pages,相比之下,Vercel 国内的访问速度更快,并且提供 Production 环境和 development 环境,对于项目开发非常的有用的,并且支持持续集成,一次 push 或者一次 PR 会自动化构建发布,发布在 development 环境,都会生成不一样的链接可供预览。

测速截图

测速截图

一些经验

模板

选个好模板,事半功倍。

我选的是 AstroPaper,迁移下来总时长也就 1 天。

图片的处理

跟据文档,Astro 支持两种处理图片的方式:

  1. 放到 public/ 目录:像其他资源一样处理,框架不做任何处理。缺点就是内容的图片放在两处,管理不便。
  2. 放到 src/ 目录:跟内容放一起,但是内容要使用 MDX 格式。

我选择了第 2 种方式,将图片放在 .mdx 文件同目录的 _img 目录里。这里使用 _img 目录是让 Astro 在扫描内容的时候,忽略掉对图片的扫描,否则控制台会有警告。

引入图片的代码如下:

import { Image } from 'astro:assets';
import cover from "./_img/cover.jpg";

<Image src={cover} alt="Cover" />

redirect

由于旧版的文章 URL 已经在别处引用,新版文章地址变化后,需要继续保持原 URL 继续有效。

使用了 Vercel 提供的机制

vercel.json

{
  "redirects": [
    {
      "source": "/blog",
      "destination": "/posts",
      "permanent": true
    },
    {
      "source": "/projects",
      "destination": "/",
      "permanent": false
    }
}

欢迎关注同名微信公众号,文章自动推送:

nomadic-blood