假期的第四天午后:煮一壶伯爵红茶,给我的脚手架重构核心模块
十月四日的午后,风里已经有了很分明的秋意。
厨房里的玻璃水壶发出咕噜噜的轻响,佛手柑与红茶的香气随着白色蒸汽在客厅里慢慢弥漫开来。我往白瓷杯里倒了半杯红茶,又加了一小勺微温的燕麦奶,端着杯子回到窗前的原木书桌旁。
小狗 Token 已经霸占了阳光最充足的那块长毛地毯,把肚皮翻出来晒着,时不时舒服地哼哼两声。
国庆长假已经过了一半。没有工作群里急促的消息提示音,没有催促上线的排期倒计时,整座城市仿佛在假期的温吞里放慢了心跳。在这样安宁的午后,做点什么最让人放松?对我来说,不是漫无目的地刷短视频,而是关掉所有社交软件,坐下来安安静静地给自己的私人脚手架做一次深度的“筋骨重构”。
为什么有些代码让人心生倦意
在日常工作里,我们常常为了赶进度,在已有的架构上打满各种临时的 patch。
这里加一个if-else特殊判断,那里挂一个全局事件监听;为了一个微不足道的小特性,顺手引入一个体积几十 KB 的第三方 NPM 依赖包。久而久之,原本清秀小巧的代码库变得像堆满旧杂物的地下室——能用,但每一次打开,心里都会升起一股说不出的滞重与烦躁。
平时总借口“没时间重构”,任由这些技术债务在角落里慢慢发霉。
而在假期的第四天,时间宽裕得像一眼望不到边的秋日晴空。你可以花一整个下午去推敲一个类名的命名是否准确,去琢磨两个模块之间的依赖关系能不能解耦得更加干脆,甚至可以把那些臃肿冗余的胶水代码一段段挑出来,毫不留情地按下Delete键。
看着文件行数从八百多行锐减到三百行,那种清爽与释然,就像在秋日大扫除后把所有窗户彻底推开,迎进第一缕微凉而清新的风。
拔掉沉重依赖:回归原生解耦
今天重构的核心对象,是我用来生成手账静态站点的命令行脚手架(CLI Tool)。
之前为了实现命令解析、色彩高亮和交互式问答,我随手拉入了commander、chalk、inquirer和ora等一整套重型依赖。每次在轻薄本上运行npm install,都要下载上百个传递依赖,不仅构建缓慢,还经常被各种安全审计警告打扰。
趁着这个安静的下午,我决定彻底拔掉这些外部拐杖,用 Node.js 近几个版本自带的原生能力进行轻量化替代。
1. 原生util.parseArgs替代重量级命令解析器
现代 Node.js 已经内置了符合 POSIX 规范的参数解析模块,只需几十行配置,就能优雅处理标志位(flags)与长参数:
import { parseArgs } from 'node:util'; const optionsConfig = { theme: { type: 'string', short: 't', default: 'watercolor-autumn', }, draft: { type: 'boolean', short: 'd', default: false, }, watch: { type: 'boolean', short: 'w', default: false, } }; const { values, positionals } = parseArgs({ args: process.argv.slice(2), options: optionsConfig, allowPositionals: true, }); console.log(`当前手账主题模式: ${values.theme},草稿模式: ${values.draft}`);不需要额外下载几兆的代码包,解析逻辑运行在纳秒级别,干净利索。
2. 原生 ANSI 转义序列替代色彩库
我们在控制台打印不同颜色的提示信息,底层本质上只是一串 ANSI 转义字符。封装一个零依赖的极简色彩微模块,只需十来行代码:
const colors = { reset: '\x1b[0m', warmOchre: '\x1b[38;2;192;108;70m', // 暖赭石色 leafGreen: '\x1b[38;2;112;140;100m', // 秋叶浅绿 mistGray: '\x1b[38;2;140;130;122m', // 晨雾灰 bold: '\x1b[1m' }; export const log = { info: (msg) => console.log(`${colors.mistGray}[手账流水线]${colors.reset} ${msg}`), success: (msg) => console.log(`${colors.leafGreen}${colors.bold}✔${colors.reset} ${msg}`), highlight: (msg) => `${colors.warmOchre}${msg}${colors.reset}` };不仅体积为零,调出的颜色还能完美匹配我偏爱的手账水彩暖色调,而不是终端默认那种刺眼的荧光绿和高饱和红。
极简代码带来的心智减负
重构完成之后,我删掉了package-lock.json和庞大的node_modules文件夹。
整个脚手架核心源码只有三个独立的原生 JavaScript 文件,没有任何第三方运行时依赖。在终端敲下执行命令的瞬间,连一毫秒的卡顿都没有,页面构建与渲染眨眼间完成。
端起茶杯,红茶的温度刚刚好入口。
很多人以为,编程最迷人的地方在于用最前沿、最庞大的技术去搭建复杂的系统。但随着在这一行沉淀得越来越久,我反而越来越迷恋“克制”的力量。
知道什么时候该做加法,更清楚什么时候该坚决做减法。把每一行代码的来龙去脉摸得清清楚楚,让程序轻盈得像一片没有负担的落叶。
阳光渐渐西斜,在原木地板上拉出长长的影子。起身伸了个懒腰,摸了摸小狗毛茸茸的脑袋。生活在代码之间,能够拥有一段完全由自己掌控的静谧时光,大概就是这个秋日长假里最珍贵的馈赠。