主题里那些「看不见」的成本

给博客挑主题的时候,大家看的都是第一屏。但主题真正的成本在于:三年后你还敢不敢动它。

依赖会腐烂

一个典型的 Hexo 主题可能挂着这些:jQuery、tocbot、clipboard.js、nprogress、fancybox、highlight.js,再加 CDN 上的 Bootstrap 和图标字体。

每一份都是「现在能用」,也每一份都是「某天会坏」。jQuery 从 3.x 到 4 的迁移拖了五年;图标字体的 CDN 域名换过一次。你不动它,它自己会坏。

少即是稳

这次迁移一个刻意的目标就是把依赖数压到最低:

  • 目录高亮:滚动监听 + requestAnimationFrame(浏览器自带)
  • 复制按钮:Clipboard API + execCommand 兜底(浏览器自带)
  • 图标:内联 SVG(就是几个 <path>)
  • 代码高亮:构建期算完,前端 0 请求
  • 图片放大:自己写的 60 行灯箱
  • 搜索:一个 JSON + 一段 indexOf

结果:整个主题的运行时依赖是 0 个。package.json 里的依赖全是构建期的。

少也意味着要自己写

代价当然有。没有 Bootstrap 就要自己写那几十行 flex 布局;没有 tocbot 就要自己写滚动监听;没有 fancybox 就要自己写灯箱。

我的判断是:这些代码加起来不到 300 行,而它们对应的依赖加起来超过 1MB,还会各自升级、各自破坏。

一条自检

如果你也在维护一个主题或者工具,可以问自己一个问题:

把 node_modules 删掉重装、把所有依赖升到最新,我还敢不敢直接发版?

不敢,就说明依赖太多了。