js文件代码不亮主因是语义高亮默认关闭且ts服务器未运行:需同时开启editor.semantichighlighting.enabled、重启ts server并确保项目根目录存在jsconfig.json或tsconfig.json。

JS 文件里代码不亮,不是插件没装对,而是语义高亮(semantic highlighting)默认关着,且 TypeScript 语言服务器没跑起来——光装插件、改主题、配 files.associations 都解决不了根本问题。
为什么 .js 文件不亮而 .vue/.json 正常?
Vue 和 JSON 文件用的是声明式语法高亮(TextMate 规则),开箱即用;JS/TS 则依赖 TypeScript 语言服务器返回的语义 token,但 VSCode 1.85+ 默认禁用 editor.semanticHighlighting.enabled,且 TS Server 不启动时,只做基础词法高亮(比如所有变量一个色),看着就像“没高亮”。
- .vue 文件里
<script></script>块走的是 Vue 插件自己的解析路径,不依赖 TS Server - .json 是纯声明式匹配,不需要语言服务器
- .js 文件若没
jsconfig.json或tsconfig.json,TS Server 会降级为“仅语法模式”,语义信息全丢
如何打开 JS/TS 的语义高亮?
必须同时满足三个条件:全局开关开启 + TS Server 运行 + 项目有有效配置。缺一不可。
- 在
settings.json中加:"editor.semanticHighlighting.enabled": true - 确保已启用官方 TS 支持(不要禁用
ms-vscode.vscode-typescript-next或内置 TS 扩展) - 项目根目录放一个
jsconfig.json(哪怕内容只是{}),否则 TS Server 不加载语义能力 - 按
Ctrl+Shift+P→ 输入Typescript: Restart TS server强制重启,右下角看到 TS 版本号才算生效
常见踩坑点:高亮颜色不对或部分失效
语义高亮优先级高于主题和 TextMate 规则,但会被错误的 scope 覆盖或 Pylance/其他语言插件干扰。
- 如果
const和let声明的变量颜色一样,说明 TS Server 没返回variable.declaration类型 token,检查jsconfig.json是否被识别(右下角语言模式旁应显示 “JavaScript Project”) - 装了多个 JS 相关插件(比如旧版 Babel ES6/7 Syntax)可能冲突,禁用非必要插件
- 自定义过
editor.tokenColorCustomizations但 scope 写错(如把support.type.primitive写成primitive),会导致部分语义 token 被覆盖失色 - 大项目里 TS Server 启动慢,首次打开 JS 文件可能延迟几秒才上色,不是失败,别急着重装插件
真正起作用的是 TS Server 返回的 token 类型,不是插件本身画颜色——所以重启服务、确认配置路径、盯住右下角 TS 状态,比换主题或调颜色更重要。











