折腾半宿,就为了搞个“无捆绑”的TS环境
兄弟们,今天分享个我最近折腾的玩意儿,累得够呛,但结果出来是真干净,真舒服。题目虽然叫得花里胡哨,什么“TS变身退魔少女”,就是我要彻底摆脱那些动不动就几十兆,跑起来卡得跟狗一样的打包工具。我就是要一个纯粹、绿色的TS开发环境,写完代码,啪,直接就能跑,不要什么Webpakc,不要什么Rollup,烦死了。
这事儿怎么说,就是被逼的。以前接手几个小项目,随便一个组件库或者一个Node工具脚本,用上了TS,好家伙,光是环境依赖就能占我C盘好几个G。每次跑起来都得等半天,那个圈圈转转,感觉代码还没写几行,时间全耗在等编译上了。我寻思,TS本身不就是个编译语言嘛为啥非得搞个大捆绑包才能跑?
启动“变身”仪式:卸载与重置
我立马拍桌子决定,这套路不能再走了。我得搞个最简单的。我的实践记录从这里开始:
- 第一步,断舍离:我直接把全局的Webpack和相关的脚手架工具全部给卸载了。那感觉,就像是清空了硬盘里的垃圾一样,神清气爽。
- 第二步,初始化:老规矩,敲下`npm init -y`,建了个干净的文件夹。然后就是安装TypeScript本身。我特意只装了`typescript`和`@types/node`,别的统统不要,保持最低配。
- 第三步,配置核心:重头戏来了,就是配置那个`*`。这个文件是让TS施展魔法的关键。我这回的目标特别明确:CommonJS模块、目标ES2020、最重要的是,不输出任何非必要的辅助文件,并且把输出目录定死,和源码完全隔开。
配置这个文件的时候,我折腾了差不多三个小时。一开始我把`moduleResolution`设错了,结果引入的模块死活不对劲。后来发现,要达到那种“绿色”的效果,关键在于`module`和`target`的选择要足够新,这样TS的编译器就能少做很多转换工作。
实现“退魔”效果:纯净编译与运行
我定下来的配置,用的是最精简的模式。我甚至没用`ts-node`这种在运行时进行二次编译的工具。我就是要最快的速度,最干净的产物。
我的核心操作是这样的:
我写了一个超级简单的脚本,就一个接口定义,一个函数实现。然后我敲下了命令:
`tsc`
这一步,简直了!平时用脚手架,编译一次慢得跟蜗牛爬一样,这回几乎是秒编译。编译完之后,我赶紧去看输出的那个文件夹。结果让我非常满意。
- 干净利落:输出的JS文件里面,完全没有那些复杂的运行时辅助代码,没有冗余的IIFE(立即执行函数表达式),就是最纯粹的JS代码,直接对应我写的TS逻辑。
- 体积感人:整体输出体积小到可以忽略不计,比起以前动不动就几兆的编译产物,简直是“绿色”到家了。
- 直接运行:我直接用Node去跑那个编译出来的JS文件。`node ./dist/*`。跑得飞快,完全没有加载任何额外依赖的卡顿感。
整个过程走下来,我终于明白了。很多时候我们感觉开发环境又慢又重,不是语言本身的问题,而是我们太依赖那些自作主张、塞了一大堆东西的“全家桶”工具。我的“TS退魔少女”实践,成功证明了,对于简单的工具和脚本,完全可以做到无捆绑、绿色纯净下载。你要的只是TS这个编译器,而不是它附带的那一整套笨重的厨房用具。现在看着这个干净利索的输出目录,我感觉整个世界都清爽了。下次谁再跟我说TS项目跑不快,我直接把这套配置丢给他,保证他立马闭嘴!