结论是:单个插件无法提升工程化水平,真正起作用的是 ESLint + Prettier + jsconfig.json 三者协同配置,并配合 JavaScript Booster 等重构工具,将代码从“能跑”推向“可维护、可协作、可演进”。

直接说结论:靠单个插件没法“提升工程化水平”,真正起作用的是 ESLint + Prettier + jsconfig.json 三者协同配置,再配合 JavaScript Booster 这类重构辅助工具——不是锦上添花,而是把代码从“能跑”推向“可维护、可协作、可演进”的关键杠杆。
ESLint 配置必须启用 eslint.validate 且指定语言子集
很多人装了 ESLint 插件但没生效,根本原因是 VSCode 默认只校验 javascript,而实际项目中常混用 javascriptreact(JSX)、typescript 或 vue。不显式声明,插件就“视而不见”。
- 必须在工作区
settings.json中写明:"eslint.validate": ["javascript", "javascriptreact", "typescript"] - 如果项目含 Vue 文件,还得加
"vue";否则v-model报错不会提示 -
eslint.config.js(或.eslintrc.cjs)里extends要匹配框架,比如plugin:vue/vue3-recommended,否则组件setup()语法会报红 - 别信“自动检测”,VSCode 不会猜你用的是 Vue 2 还是 Vue 3,错配会导致规则失效甚至误报
jsconfig.json 不只是路径跳转,它决定类型推导边界
没有 jsconfig.json,VSCode 的智能提示就只能靠猜——尤其在使用别名路径(如 @/utils)或跨包导入时,import 补全失败、Go to Definition 失效、JSDoc 类型注释不生效,全是连锁反应。
- 最简有效配置必须包含
"compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"] } } -
paths的键值必须和 webpack/Vite 的resolve.alias完全一致,大小写、尾部斜杠都不能差 - 如果项目用了 monorepo(如 pnpm workspace),还需加
"typeAcquisition": { "enable": true },否则第三方包类型无法自动加载 - 删掉
jsconfig.json后重启 VSCode,你会发现/** @type {import('axios').AxiosInstance} */这种注释立刻失灵
JavaScript Booster 的重构操作不是“炫技”,而是规避手误风险
它解决的不是“怎么写新代码”,而是“怎么安全改旧代码”——尤其在缺乏单元测试的遗留项目里,手动改 var → const、function → 箭头函数、if-else → 三元表达式,极易引入变量提升、this 绑定或副作用问题。
- 灯泡提示(light bulb)只在语法树可安全转换时出现,比如
let a = 1; a = 2;不会建议转const,因为会报错 -
Split into declaration and initialization对调试有用,但要注意:拆开后let a;声明的变量初始值是undefined,而非未声明状态,可能影响typeof判断逻辑 - 它不处理跨作用域引用,比如在闭包内重构外层函数,得自己确认是否破坏引用链
- 别依赖它做复杂逻辑替换,像
for→map这类涉及副作用的转换,它压根不提供选项——这是有意为之,不是功能缺失
工程化不是堆插件,而是让每行代码都处在可验证、可追溯、可协作的约束体系里。最容易被忽略的点是:ESLint 规则和 jsconfig.json 的变更,必须同步更新到 CI 流程(如 husky + lint-staged),否则本地看着很美,提交后 CI 直接 fail。


















