写代码的时候,谁没用过插件呢?尤其是前端开发,一个项目动不动就几十个依赖。但插件一多,问题就来了——版本冲突、加载失败、打包体积爆炸,甚至整个项目跑不起来。这些看似小问题,往往能让你加班到凌晨。
依赖不是越多越好
刚入行时总觉得,功能不够就装插件。轮播图用 Swiper,弹窗用 SweetAlert,状态管理上 Vuex,路由来个 Vue Router……结果 npm install 一下,node_modules 直奔 500MB。更离谱的是,某个插件更新后接口变了,项目直接报错,排查半天才发现是子依赖被自动升级了。
其实很多功能根本不需要额外依赖。比如简单的节流函数,自己写几行代码就行,非得引入 lodash.throttle?有时候为了省那十分钟,后续要花三小时维护。
版本锁死很重要
package.json 里写 ^1.2.3,看起来是方便自动更新,实则埋雷。某天同事拉代码,装了 1.3.0,而这个版本删了一个回调参数,所有调用的地方都挂了。
建议在项目稳定后,把关键依赖的版本号锁定。可以用 == 或者直接删掉 ^ 符号:
{
"dependencies": {
"axios": "==0.27.2",
"vue": "3.2.47"
}
}
利用 lock 文件
npm 的 package-lock.json 或 yarn 的 yarn.lock 不是摆设。它记录了每一个依赖的具体版本和来源。团队协作时,必须提交这个文件,不然每个人装出来的依赖树可能完全不同。
曾经有个项目,本地运行好好的,部署到服务器却报 Module not found。查到最后发现是 lock 文件没提交,服务器装了不同版本的 moment.js。
按需引入,别全量加载
像 Element Plus 这类 UI 库,如果直接 import 全量引入,打包完可能多出 2MB。正确的做法是配合 vite-plugin-style-import 或 babel 插件做按需加载。
// 按需引入按钮组件
import { ElButton } from 'element-plus';
// 而不是
import ElementPlus from 'element-plus';
这样 webpack 或 Vite 才能做 tree-shaking,把没用的代码踢出去。
检查冗余依赖
时间久了,项目里会残留一些不再使用的包。比如当初用了 dayjs,后来换成 luxon,但忘了删 dayjs。这种垃圾堆积多了,不仅占空间,还可能引发安全警告。
可以跑命令检查:
npx depcheck
它会列出哪些依赖在代码中没被引用,哪些该装却没装。
私有插件怎么办
公司内部有些通用组件,不适合发到公共仓库。这时候可以用 npm private package,或者直接通过 Git 地址安装:
"dependencies": {
"@company/utils": "git+ssh://git@github.com/company/utils.git#v1.0.3"
}
记得配上 CI 脚本,确保构建机也能拉下来。
小步快跑,别一次性大更新
看到依赖提醒更新,别手贱全点更新。我见过有人一口气把 Webpack 从 4 升到 5,Babel 配置全废,折腾一周才搞定。
稳妥的做法是逐个升级,查对应文档,看 breaking changes。升完跑一遍测试,没问题再提交。
插件依赖就像厨房里的调料,适量提味,过量毁菜。管好你的 node_modules,就是对自己时间最大的尊重。