这周接了个后台管理系统的单,甲方做建材的,报价一万二,工期本来谈的十二天。活儿本身不难,Vue3 加 Vite,套个现成的 admin 模板,改改页面接接接口就完事。我上周五就把本地跑通了,页面、路由、权限、假数据全对。
周一早上传服务器,白屏。
也不是全白,登录页能进,点进主控制台就白。控制台报“Failed to resolve component: DataTable”。我当时心想,没注册呗,查注册,查了半天,注册了。import 也有,components 里也写了。
我重装 node_modules,换了 npm 源,把 node 版本从 18 降到 16。没用。又去翻组件库文档,看是不是版本不兼容,把依赖升了降、降了升,来回折腾了三四轮。到周一晚上十一点,我还在对着那个破报错发呆,心想这单是不是要亏了。一万二报得不高,本来打算五天干完剩下的时间再接一单小的。照这么弄下去,两天就搭进去了。
说白了最气人的是本地一点问题没有。本地跑得好好的,一打包就崩。我甚至怀疑是 Vite 的 tree-shaking 把那个组件摇没了,去翻构建产物,里面确实有,就是找不到。
周二早上我干了件蠢事,把整个项目除了 src 以外全删了重新配。配到下午两点,还是白。这时候我上了个厕所,回来盯着文件名看了一眼。
文件叫 DataTable.vue,引入写的是 dataTable.vue。
一个大写 D,一个小写 d。就这一个字母。
我本地是 Windows,不区分大小写。服务器是 Linux,区分。本地能跑,服务器就找不到。
两个通宵,几轮依赖升降,删了重配的构建配置,全是因为这一个字母。
改完,打包,上传,秒好。
我对着屏幕坐了五分钟,没生气,也没想笑。就是那种,你花了十几个小时绕了一大圈,结果问题在你每次打开这个文件都会看到的地方。不是你菜,是这个东西藏得确实阴,但你心里清楚,这事儿本来五分钟能查出,如果你一开始就去服务器上看文件路径而不是在本地反复试。
尾款甲方昨天打了,没扣钱,还夸了一句“你们做技术的细心”。我没回。
那两天本来能再接一个小单,做企业官网的,三千五,人家找了个学生做了,报价一千二。卷不过,也不怪人家。跑题了说回来,这事儿给我留了个教训——说是教训也不对,我到现在也没加什么大小写检查的插件。人的毛病哪有那么容易改,下次遇到,八成还是先在本地翻半天。
但有一说一,我以后所有项目文件名,全部小写。全部。谁劝我写驼峰我跟谁急。
这单赚是赚了,工期也没拖,但那两个晚上本来能睡个好觉。账我算得清:少睡十六个小时,换算成接单能力的损耗,比那三千五的小单还贵。