yufan.me/content/posts/2024/2024-04-07-switch-blog-to-nextjs.mdx
2024-06-14 02:13:47 +08:00

68 lines
9.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 弃用 WordPress 了,但我相当“后悔”
slug: switch-blog-to-nextjs
date: 2024-04-07 16:09:09
updated: 2024-04-14 00:07:00
tags:
- 博客
category: 编程
summary: 如你所见,当你访问这篇文章的时候,我已经把写了 13 年的博客程序从 WordPress 迁移到了自己用 Next.js 写的程序,这可能是我第 N 次尝试使用其他的方式写博客,但我想绝对不会是最后一次。
cover: /images/2024/04/2024040719182310.jpg
---
![あんよ - crossroads](/images/2024/04/2024040719182344.jpg)
如你所见,当你访问这篇文章的时候,我已经把写了 13 年的博客程序从 WordPress 迁移到了自己用 Next.js 写的程序。这可能是我第 N 次尝试使用其他的方式写博客,但我想绝对不会是最后一次。
第一次接触类博客的平台还是 20 年前,初一同学在课间说道:“我开通了 QQ 空间,快去给我踩一踩。”正儿八经地写作,还要追溯到 15 年前,那时的我是那么的多愁善感,什么东西都想要“为赋新词强说愁”。我的足迹遍布各类 SNS 平台,在上面书写各种现在看来相当幼稚的话语。
因为专业的原因,在大学期间接触到了独立博客和 WordPress当时的我就被这种独立而又个性的写作方式惊到了。那时还属于独立博客的黄金年代QQ 雷锋群里群英荟萃,我那孱弱的前端知识就是通过此类途径习得。而我没想到的是,[当初的开博宣言](/the-beginning-of-blog)竟然一写就是 13 年。
年龄真是个好东西,因为其增长,我们能不断地丰富自己的阅历,也能见证所谓的“历史”。兜兜转转,写博客的人来来去去。有些相识数载至今还是好友,有些已经消失再无音讯。而我,对这 WordPress 也是又爱又恨,这期间换过太多的平台。有简单的 Hexo、Hugo也有同样基于 LAMP 平台的 Typecho、Emlog、Z-Blog还有之前很时髦的 Ghost。很多文章评论都放在了多说、Disqus 上,因为这来来回回的“搬迁”遗失大半。到头来,竟然还是这 WordPress 最好用,如同家里的“黄脸婆”,阅尽世间百态,才发现老婆是真爱。虽然至今还是不会写 WordPress 主题,但好在漂亮的主题数不胜数,凭着钞能力也能基本解决。
但,我还不甘心。
这十几年来前端风起云涌每天都有新的东西诞生。13 年前博客用个 jQuery 就很了不起了,很多页面还使用表格布局,为了 IE6 要写一堆 Hack那个时候声称不兼容 IE 的网站都属于“珍惜动物”。而如今 IE 早已不复存在,继任者 Edge 也把自己变成了 Chrome 的模样。前端相关的框架更是层出不穷,光打包工具我就完完整整地经历了 Grunt、Gulp、Webpack、Rollup、Vite、SWC 等,更别提其他的了。在这些技术的背景下,我这基于 jQuery 的 WordPress 就显得稍微有点 old school 了。
上周和 Tison 聊天,发现他正好准备基于 Astro 弄个[新的博客](https://github.com/tisonkun/dacapo)。沉眠于心中多年的想法终于浮起既然用了这么多博客平台都不满意为何不能自己写一个。Next.js 这么时髦,其 App Router 还能用最新的 React Server Component我都眼馋很久了。于是说干就干趁着正好清明放假我把几乎所有的时间都投入在了这一“浩大”的造博运动中。
## Logo 设计
![Blog Logo](/images/2024/04/2024040719297778.jpg)
对我而言,技术牛逼与否并不是最重要的,最重要的是颜值。如果不好看,那就直接 pass。所以还没写博客第一步我就在考虑重新设计自己的博客 logo。对于之前用的 logo其实问题并不大主要的问题是矢量化。绘制这个 logo 的时候还是 6 年前,像素被限制在了 65px在 PSD 底稿和对应字体都丢失的当下,想要放大适应视网膜屏幕等就显得有些困难。于是我借着这个机会,学习使用 [sketch](https://sketch.com) 来绘制矢量图形。这当中最大的绘制难点就是 logo 中那两个不规则的半圆环,我画了两个圆去叠加,然后合并后一点点拖拽曲线。才调整到和以前相思的形状。
绘制“帆”字的时候已经稍微熟悉,就直接使用钢笔工具一个个锚点描边,再稍微调整曲线就好,但是没想到还是在和圆环合并上栽了大跟头。弄了半天才发现是路径曲线的闭合问题,这其中的曲折大概就像是以前在微博上看到的[这张长图](/images/2024/04/2024040719234718.jpg)所描绘的景象。不过万幸的是,最终圆满地达成了我想要的效果。
在绘制 logo 的同时,我也一并绘制了黑白两种形态,为日后主题支持黑白模式准备,同时也绘制了 Github Poster 放在 `README.md` 上用于展示。这当中最有意思的事情,就是对以膨胀色与收缩色的概念的复习。以前自学设计的时候,觉得这东西很抽象。这次设计黑色 logo 的时候,发现明明是同样的大小,但是黑色的 logo 在屏幕上就是显得大上一圈。我不得不微调曲线,向内收缩一圈才在视觉的保持了 logo 的大小一致,相当有趣。
## 字体使用
![OPPO Sans](/images/2024/04/2024040719182210.jpg)
字体选择上分为博客正文字体和图片字体。以前并不懂版权,不知道字体很多是需要授权才能在一些公开媒介上使用的,这次特意选择了商业免费可用的字体。
正文字体使用的是 [OPPO Sans 3.0](https://www.coloros.com/article/A00000050/)5 年前在字谈字畅的 [PodCasts](https://thetype.com/typechat/ep-113/) 得知此字体的公布,当即就喜欢上了。虽然和阿里普惠体、微软雅黑体等一众“汉仪兄弟们”师出同门,但是其变化是最讨喜的。它去掉了自冬青黑体时代就有的大喇叭口,字形更加方正,在笔画转弯处也更加刚正。其家族字体设计更多的是为传统非视网膜屏幕服务,所以夸张的笔锋搭配上抗锯齿就能有较好的观感。这种设计,放在当今连手机都是视网膜屏幕的年代,就显得很难看。所以 OPPO Sans 的设计,在当下很长一段时间,将成为我的首选字体。
Logo 部分的字体,主要是基于 [M+A1](https://booth.pm/ja/items/2347968) 进行制作。虽然此字体是日本人制作,但是不同于在日本起绝对统治地位的明朝体,此字体是一款明朗的黑体,而且同时免费提供了多种粗细字型,简直感动到哭。最有意思的就是细款字形的笔画末端都有一定的隆起,结合之前学习到的[光陷阱](https://www.thetype.com/2021/06/21723/),想必此款字体在打印机下也能有极好的显示效果。
## 技术选型
技术选型上这次有点激进,相比已经成熟很好用的 VitePress 等动静结合的生成工具,我义无反顾地选用了 Next.js 的 App Router运行环境选用了更快的 Bun。至于其他方面基本是照着 [leerob](https://leerob.io) 的博客进行仿写。所以文章格式不再是常见的 Markdown而是能插入动态内容的 MDX。对于历史的评论我还是舍不得丢弃毕竟有 3000 多条。所以再三对比之下,我选择使用 [Artalk](https://artalk.js.org) 进行存储。有了多说的经历后,我也不敢使用任何第三方的 SaaS 服务存储评论,毕竟数据在自己手里才最安全。
博客以前最喜欢的音乐播放器是 Hermit-X对应的作者荒野无灯已经神隐很久获取网易音乐信息的 [Meting API](https://github.com/metowolf/Meting) 也没持续更新。而 APlayer 更是不知道 [DIYgod](https://diygod.cc) 什么时候能来“扫墓”,上次 APlayer 的诈尸还只是更新了个 License。所以在新博客环境只有 [Aplayer React](https://aplayer-react.js.org) 这个名为 APlayer 实则是借着其样式用 React 完全重写的播放器可用,其在 RSC 下有点小问题,但估计短时间内作者也没时间修复。(谁叫我是前端菜鸟呢)
MDX 一开始是手动使用 `fs` 加载,使用 `grey-matter` 解析 `matter` 后再用 `next-mdx-remote` 渲染。但是鉴于自己太菜,很多页面的渲染都需要全量读取博文解析。后面改成了[推友推荐](https://twitter.com/ilovek8s/status/1776809454790676827)的 `contentlayer` 先渲染静态化,再进行加载。但瞅着 `contentlayer` 这半死不活的状态,未来大概率还是要弃。😭
## Update 2024/04/14
没错,一周后我又来屁颠屁颠地更新博客啦,一周过去后,我的博客也发生了不少变化。首先是搜索终于支持了,使用的是 fuse.js。前文提到的 Contentlayer 也被我废弃,换成了更好用的 Velite。
----
写此文章前,本有一肚子关于清明三天折腾的坎坷想要倾诉。真正写下来的时候,却又没多少。一来是年龄的增长,很多东西不再像以前那么过激。二来,大部分问题基本解决。数数上次更新博客的时间,已经不知道是猴年马月。希望自己在未来的年月里,能笔耕不辍,多记录一点自己的生活。
至于博客载体,那都是浮云啦。
![mocha@新刊委託中 - 親愛なるあなたへ](/images/2024/04/2024040719244778.jpg)