三年前我接手过一个老项目,维护一个用了六年的jQuery插件。那插件干的事很简单,就是把表格排序,但代码里塞了四千多行,光处理IE8兼容就占了一半。没人敢动它,谁碰谁出事。后来我实在忍不住,花了一个下午重写,用原生JS加一个排序函数,两百行搞定。那个老插件最后被删掉的时候,全组人居然有种送走瘟神的解脱感。
这就是web插件的现状——大部分插件都在解决“当时的问题”,而不是“永远的问题”。它们像创可贴,贴的时候挺方便,但时间一长,皮肤开始溃烂。前两年流行用Bootstrap的轮播图插件,现在你再看,多少人直接写个CSS scroll-snap就完事了。不是插件不好,是问题本身变了。
我见过最魔幻的用法,是有人为了一个提示框功能,引了整个UI框架。那框架自带三十多个组件,最后只用了tooltip一个。页面加载速度直接慢了两秒。用户不会关心你用的是不是“业界标准”,他们只感受到鼠标点下去,弹窗要等半秒才出来。这半秒,就足够让他们关掉页面。
但要说插件完全没用了,也不对。真正好用的插件,往往是那种“小到你不觉得它是插件”的东西。比如那个叫dayjs的日期库,只有两KB,但API和Moment.js几乎一样。你把Moment换成它,代码一行不用改,体积少了百分之九十九。这种插件才是健康的——它不绑架你的架构,不逼你接受它的世界观,只是安静地解决一个具体问题。
我自己的习惯是,能用CSS解决的绝不用JS插件,能用原生API的绝不用封装库。但有个例外——那些处理浏览器差异的插件,我到现在还在用。比如那个让Safari支持avif图片格式的polyfill,没有它,我的图库在iPhone上就是一片空白。这种插件是“补丁”,不是“功能”,但恰恰是补丁,才让整个web不至于碎成一地。
说到底,web插件的本质是“借力”。你借别人的代码,省自己的时间。但借力有个前提——你得知道自己在借什么。我见过太多人,连插件源码都没打开过,就敢往生产环境里塞。等出问题了,只能对着GitHub的issue页面干瞪眼。那感觉就像借了朋友的车,连油箱盖在哪都不知道,半路抛锚了只能打电话求救。
所以我对插件的态度很简单:能不用就不用,非用不可就挑那种“一眼能看懂”的。看不懂的,再炫酷也先放一放。毕竟,代码这东西,今天你省下的理解成本,明天都会变成维护时的利息。