我这人做项目,最怕的就是环境配置那堆烂事。尤其是接手一个TS写的后台服务,那家伙,每次换个机器部署,光是npm install就能把我人折腾掉半条命。依赖项多得跟蜘蛛网似的,版本一不小心就错乱了。
我当时就琢磨着,这不行,得把它给彻底改造一下,变成那种干干净净,点开就能跑的“绿色版”。这名字起得好听,叫“退魔少女”,就是要把那些烦人的依赖魔鬼全都给清理掉。
从依赖地狱里爬出来
我的第一步,是狠狠地研究了这个项目的依赖树。我发现很多依赖都是构建时用的,运行时根本用不着。我决定先从打包入手,把前端和服务端打包逻辑分开搞。
- 前端部分: 我直接放弃了我们项目里自带的那个老旧Webpack配置。那东西又慢又复杂。我转头试了试esbuild,那速度简直是飞起来了。我动手写了一个超级精简的脚本,目的只有一个,把所有的
.ts文件,连带着那些基础的库,全部一股脑地塞进一个巨大的JS文件里。 - 配置精简: 我把tsconfig文件彻底扒了一遍,只留下最核心的编译规则,那些调试和开发环境的配置,全部毫不留情地删除了。
这一通操作下来,前端的体积是小了一圈,但后端服务还是得依赖Node环境去跑。这是大问题,因为我不想让使用者还得先装个指定版本的Node。
把Node也塞进压缩包
这是整个实践中最关键的一步,也是“变身”成功的核心。我开始寻找能把Node环境和我的代码捆绑在一起的工具。我之前听说过pkg这个东西,可以把Node项目打包成一个单文件执行程序。
我立马就去官网看了一圈,然后上手就开始折腾:
我调整了我的启动代码,确保它能识别出自己是在被打包后的环境中运行。然后我开始尝试打包。第一次失败了,因为pkg找不到某些动态加载的模块。我硬着头皮,一个文件一个文件地去定位,发现是数据库连接驱动出了岔子。
我通过配置把那些外部依赖都指明了路径,然后再次执行了打包命令。这回时间很长,但我成功了!我得到了一个巨大的可执行文件,名字我直接改成了Exorcist_*。这家伙,它自己就带了Node环境,不需要外部依赖。
一步,就是把它做成一个真正的“绿色下载”。我写了一个简单的批处理脚本,负责检查运行环境,然后启动那个大大的执行文件。我把这个脚本,那个可执行文件,以及必要的静态资源文件,全部扔进了一个压缩包里。
当我在一台全新的、连Node都没装的机器上,双击那个批处理脚本时,项目成功地启动了,服务跑起来了,一切正常!我看着那个小小的压缩包,成就感简直爆棚。这个TS项目,终于挣脱了环境依赖的枷锁,彻底变成了一个独立自主、即插即用的“退魔少女”。以后再也不用忍受那些npm安装失败的痛苦了,直接压缩包走天下,舒服!