惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
V
Visual Studio Blog
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
博客园 - Franky
C
CXSECURITY Database RSS Feed - CXSecurity.com
大猫的无限游戏
大猫的无限游戏
P
Privacy & Cybersecurity Law Blog
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
L
LangChain Blog
I
Intezer
V2EX - 技术
V2EX - 技术
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
腾讯CDC
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
TaoSecurity Blog
TaoSecurity Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Fortinet All Blogs
Project Zero
Project Zero
Blog — PlanetScale
Blog — PlanetScale
S
Security @ Cisco Blogs
量子位
M
MIT News - Artificial intelligence
美团技术团队
C
Cisco Blogs
S
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
Google Developers Blog
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
The Hacker News
The Hacker News
H
Help Net Security
S
Secure Thoughts
Scott Helme
Scott Helme
SecWiki News
SecWiki News
T
Troy Hunt's Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 叶小钗
O
OpenAI News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 司徒正美
T
Tenable Blog

一颗小树

周更的第 100 篇 改变阅读方式 宝贵的人生建议 小树的工具库 2023 读《重构》有感 仅需 10 分钟,用 GPTs 实现文章总结助手 高质量的需求交付 产品始于问题,而不是解决方案 如何更好地休息 最优解人生 与体重斗,其乐无穷 结构化 prompt = 数字员工? 持续创作的法门 如何降低知识焦虑 7 月思维碎片 N 倍生产力提升:我的 AI 助理 Indie Hacker,互联网打工人的下一个出路? 如何成就伟大事业 夏日碎片 小报编辑的自我修养 一颗小树 #49 投入真实生活 一颗小树 #48 过年杂记 一颗小树 #47 我的人生信念(2023) 一颗小树 #46 回本就卖 一颗小树 #45 规划和落地 小树的 2022 年终总结 一颗小树 #44 构建高质量信源 一颗小树 #43 我的 2022 书单 一颗小树 #42 阳了怎么办 一颗小树 #41 一人企业 一颗小树 #40 非必要别正常啦 一颗小树 #39 阅读和创造 一颗小树 #38 疫情生活碎片 一颗小树 #37 基于多维表格的可转债投资系统 一颗小树 #36 飞盘初体验 一颗小树 #35 雁栖湖半日游 一颗小树 #34 初探多维表格 一颗小树 #33 回不去的名字叫家乡 一颗小树 #32 生活需要留白 一颗小树 #31 Figma 的成功之道 一颗小树 #30 拓宽自己 拥抱善意 一颗小树 #29 有关下雨的记忆 一颗小树 #28 隐入尘烟 一颗小树 #27 找到并坚持自己的热爱 一颗小树 #26 好产品的“差”改版 一颗小树 #25 吹吹南澳岛的海风 一颗小树 #24 代码重构的一点心得 一颗小树 #23 和团队新同学的对话 一颗小树 #22 从《干法》中学到的 一颗小树 #21 阿里四年我的收获和感想 一颗小树 #20 周更半年我学到的事 一颗小树 #19 慢慢来比较快 一颗小树 #18 只规划每天最重要的三件事 一颗小树 #17 裁员潮下的反思 一颗小树 #16 纪录片的力量在于真实 一颗小树 #15 世界很小但很好 一颗小树 #14 让自己成为问题的终结者 一颗小树 #13 别忘记你的热爱 一颗小树 #12 聊聊写作这件事 一颗小树 #11 开始投资前更重要的事 一颗小树 #10 疫情囤货指南 一颗小树 #9 疫情之下 重建内心的秩序 一颗小树 #8 不要倒在黎明前 一颗小树 #7 从小孩子身上学到的事 一颗小树 #6 和自己的产品一起成长 一颗小树 #5 技术对生产力的的变革是不可阻挡的 一颗小树 #4 暴风雨的意义 一颗小树 #3 投资成功,是我们变成一个更好的人之后自然的结果 一颗小树 #2 持续学习来应对这个复杂多变的世界 一颗小树 #1 任天堂和上岭村 一颗小树 #0 这是写给你们的第一封信 游戏改变世界 把自己给开源了 构建自己的不为清单 有爱和被爱 做了一点微小的工作 小树的 2021 年终总结 小树的 2020 年终总结 与其感慨路难行,不如马上出发 阿里前端也切图?不,人工智能帮你做 如何写好简历,拿到大厂 offer 的敲门砖 任时光匆匆流去 | 2019 年终总结 聊聊在阿里远程办公那点事儿 在 D2 做主持人是怎样一种体验? 提高工作效率的几个方法 有限状态机在 CSS 动画中的应用 「译」React 项目结构和组件命名之道 编写小而美函数的艺术 使用纯粹的JS构建 Web Component 翻译计划-状态管理请三思 利用Dawn工程化工具实践MobX数据流管理方案 高性能 MobX 模式(part 3)- 用例教程 高性能 MobX 模式(part 2)- 响应变化 技术文章写法浅谈 翻译计划-用node.js开发一个可交互的命令行应用 无他,唯手熟尔-前端实习面试题篇 工欲善其事必先利其器-前端实习简历篇 手把手带你用原生js实现css属性的set和get 我们来翻翻元素样式的族谱-getComputedStyle 翻译计划-从sass到PostCSS
Astro 搭建个人博客
也树 · 2023-02-12 · via 一颗小树

你好,我是小树。这是我为你写的第 50 封信。每期都会同步更新在微信公众号一颗小树竹白专栏。现在有 203 位朋友订阅了这封信,也欢迎你邮件订阅,第一时间收到更新推送。

这篇文章是我用 Astro 重构个人博客的经验总结。

内容分为以下几部分:

  1. 为什么想要重构博客
  2. 为什么选择 Astro
  3. 博客迁移过程
  4. Astro 的优缺点

如果你也有类似的需求,希望这篇文章对你有帮助。

为什么想要重构博客?

主要原因是颜值不够,Next 主题用了太久,有点审美疲劳。

另外一方面是因为 Hexo 的架构相对比较旧,还是基于 nunjucks 模版的渲染,很多社区现代化的前端组件集成不方便。

还有一个原因是希望了解下时下流行的 Island 架构,并且借助这次重构,尝试找到比较便捷的高性能内容站点解决方案。

为什么选择 Astro?

关注 Astro 其实有段时间了,之前很多地方会把它和 Next.js 放在一起,没有太深究。

最近社区里有不少人用 Astro 改写了自己的博客或者是其它类型的内容站点,风评很好。看了官方文档之后,确实和我之前理解的不同,Astro 会更专注在内容站点,而 Next.js 更偏向于构建 Web APP。

尝试了跑了一个 demo 之后,发现上手也足够简单,技术栈很熟悉。

默认支持 Markdown 和 MDX 的渲染,这意味着迁移起来成本也会低不少。

接下来,说干就干。

博客迁移过程

迁移过程中做了以下工作:

  1. 项目初始化

由于构建配置不兼容,所以单独切出了一个 v2 分支和独立的 Vercel 项目用于部署验证。

基于 Astro Paper 主题 初始化了工程结构,只保留了之前的博客内容和图片。

  1. 功能迁移

检查页面的基础功能:如博客列表、标签、关于、搜索等基础功能,然后是诸如页面信息(用于 SEO)、文章展示字段、社交媒体、数据埋点等细节。RSS 和 Sitemap 的能力是内置的,也不需要做什么修改。

这次重构把归档页面取消了,只是一个基于年份的分组列表,目前看没有必要单独一个路由来承载。

项目默认只有 blog 一种文章类型,为了方便区分,利用 Astro 内置的 Collection 能力,新增了 newsletter 类型的文章,顺便统一了类型定义和文章的查询方法,避免获取全部文章列表时有遗漏。

还剩下一些像返回页面顶部、赞赏、知识产权声明等能力,暂时就没有了,后续慢慢再补上。

  1. 内容迁移

由于一共有一百多篇文章,靠人力去修改格式,就违背了自己不要做低水平重复的原则。

用 Node.js 简单写了一个迁移脚本,将 Markdown 文件的 frontmatter 转换为新的规范。

Markdown 的内容渲染是完全兼容的,所以到这里开发工作也就接近尾声了。

  1. 测试和发布

最后是检查功能,比如页面的路由是否有不兼容的更新,保持前后版本已有页面的路径一致,避免从之前的链接访问过来就找不到内容了。

再者是页面的文案和样式,需要比较细致地走查和调整。

经过这一番折腾之后,终于把代码合并到了主干分支,发布到了正式环境。

整个迁移过程用了 1.5 天。

Astro 的优缺点

预先说明:Astro 框架默认依赖是很少的,TailwindCSS 等能力是 Astro Paper 这个主题内置的,非必需。

优点:

  1. 开箱即用,常见的 RSS、Sitemap 等能力都很容易集成
  2. 默认支持 SSG,没有 JavaScript 依赖,页面加载和渲染非常快
  3. 类型安全,Markdown 文件的 frontmatter 可以用 Schema 来约束,背后是基于 Zod 的类型校验
  4. 支持集成 Typescript、React、TailwindCSS 等常见技术栈,定制起来更顺手
  5. .astro 页面有点像 Vue 的单页面模版,可以很简单的实现数据的获取和转换,并且可以通过 JSX 的方式互相引用
  6. 绝大部分功能逻辑都由自己掌控,相较于 Hexo 主题的黑盒逻辑,定制更容易

缺点:

  1. 相较于 Hexo 主题开关式的配置方式,更灵活,但通用性会变弱,功能需要额外的开发成本
  2. TailwindCSS 和其中的的 Typography 插件的代码写起来可读性很差
  3. 没发现页面模版的能力,额外写了一个 Node.js 脚本来通过模版创建新文章
  4. 没了自动生成永久 slug 的能力,需要自己写一个具有语义的名称,但 url 可读性好一些
  5. 构建会比之前略慢,但基于自动的流程,影响可以忽略不计

说了这么多,最重要的收获是:基于 Astro 框架,能够快速上线、高性能内容站点,并且用很低的成本持续管理内容。

最后,欢迎访问我的新博客:https://yeshu.cloud

碎碎念

说点题外话,从这期开始标题上就不加序号了。一来能避免标题太长影响观感,二来能减弱文章的时间顺序,方便后续专题的整理。如果有什么其它建议或意见的话,也欢迎留言反馈给我。

谢谢你的关注,我们下期再见。👋🏻


往期推荐

你也可以在这里找到我:即刻Twitter、微信公众号一颗小树

这里是小树的 newsletter。 每周一发布,欢迎订阅。 如果你觉得这篇文章对你有用,欢迎分享给更多好友。