vs code 默认不支持 javascript 深度语言功能,需明确区分语法解析(如volar、typescript nightly)、格式化(prettier)、代码检查(eslint)、运行(code runner)四类插件职责;eslint需手动启用并配置项目规则文件及解析器,prettier应让位于eslint修复,纯js项目无需volar。

VS Code 默认不带 JavaScript 运行或深度语言支持能力,必须靠插件补足——但装错、装多、配置冲突反而会让 console.log 都报红,require 提示未定义。核心不是“装哪些”,而是“谁管语法、谁管格式、谁管运行、谁管检查”,四者职责必须清晰。
ESLint 插件只负责检查,不负责修复或格式化
很多人装了 ESLint 扩展却没看到错误提示,是因为:它默认不激活,也不自动读项目配置。必须确保两点:
- 项目根目录存在
.eslintrc.cjs或.eslintrc.json(用npx eslint --init生成最稳) - VS Code 设置里启用
"eslint.enable": true(不是靠插件开关,是靠这个配置项) - 如果用 TypeScript 或 Vue,ESLint 必须配合
@typescript-eslint/parser或vue-eslint-parser,否则defineProps会标红
常见现象:React 项目里 useState 报 “not defined”,其实是 ESLint 没加载 eslint-plugin-react,不是代码写错了。
Prettier 和 ESLint 冲突时,以 ESLint 的 fix 为准
两者都支持自动修复,但顺序错了就会互相覆盖。正确做法是:
- 在
settings.json中关闭 Prettier 的保存自动格式化:"prettier.enable": false - 让 ESLint 接管全部格式 + 修复:
"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 同时安装
eslint-config-prettier(禁用 ESLint 中与 Prettier 冲突的规则),否则semi: false会被 ESLint 强制加 ;
典型错误:开了 editor.formatOnSave 又设 defaultFormatter 为 Prettier,再开 ESLint 的 fixAll —— 保存一次,代码被格式化两次,括号位置、引号类型来回跳。
Code Runner 适合快速执行,但不支持 import/export
code-runner.runInTerminal 设为 true 后,它本质就是调 node xxx.js。这意味着:
- ES6 的
import会直接报错Cannot use import statement outside a module - 解决方法只有两个:改用
node --experimental-modules(不推荐),或换用ts-node/esbuild-runner - 更务实的做法:日常调试用 Code Runner,模块化开发时切到终端手动跑
npm run dev或npx tsx src/index.ts
别指望一个插件包打天下。Code Runner 的价值是 Ctrl+Alt+N 看一眼函数返回值,不是替代构建流程。
Volar 不是给纯 JS 项目用的
如果你只是写 index.js + script 标签,装 Volar 完全无效,还会拖慢启动速度。它只在打开 .vue 文件时激活,且依赖 vue-tsc 和项目中 compilerOptions.types 配置。
- 纯 JS 项目真正需要的是
JavaScript and TypeScript Nightly(VS Code 官方维护,比内置 JS 支持更新快) - 如果用了
jsconfig.json,务必包含"checkJs": true和"maxNodeModuleJsDepth": 2,否则lodash类型提示不生效 - VS Code 1.85+ 已默认启用
typeAcquisition,但遇到axios无提示,仍要手动npm install @types/axios --save-dev
插件不是越多越好,而是每个都得清楚它在哪一刻起作用、依赖什么、退出条件是什么。比如 Live Server 只响应 .html 文件保存,对 .js 文件完全静默——这点不理解,就容易误以为“插件没生效”。











