Sublime Text 默认不支持 JSX,需安装 Babel 插件并配置语法、ESLint 解析器及 Emmet 作用域;无 LSP 支持,无法智能补全 Hooks 或跳转定义,关键检查仍需 ESLint 和人工。

Sublime Text 默认完全不识别 JSX,.jsx 文件打开就是白底黑字或报 Unexpected token <,这不是你配错了,是它压根没这个能力——得靠插件补。
装 Babel 插件并绑定 .jsx 和 .js 扩展名
Babel 是目前唯一持续维护、支持 .jsx/.tsx、ES2020+ 语法、Emmet 兼容的方案。别选 React Syntax Highlighting(已停更)或 JavaScript Next(不认 ??=、import type)。
- 按
Cmd+Shift+P(macOS)或Ctrl+Shift+P(Win/Linux),输入Package Control: Install Package - 搜
Babel,认准作者是babel-sublime(GitHub 地址应为https://github.com/babel/babel-sublime) - 安装完,打开任意
.jsx文件,点击右下角语法名 →Open all with current extension as…→Babel → JavaScript (Babel) - 让
.js文件也生效(CRA/Vite 项目里组件多在.js中):菜单栏 →Preferences → Settings – Syntax Specific,右侧加:{ "extensions": ["js", "jsx", "mjs"] }
JSX 标签标红?不是高亮问题,是 ESLint 解析器没配对
标红 <div> 或 {item.name} 不是 Babel 没起作用,而是你本地启用了 SublimeLinter-eslint,但它默认用 espree 解析器,根本不认识 JSX。
- 确认是否装了
SublimeLinter和SublimeLinter-eslint:如果没在终端跑eslintCLI,建议直接卸载,避免干扰 - 如果必须保留,进
Preferences → Package Settings → SublimeLinter → Settings,user 配置里加:"linters": { "eslint": { "args": ["--parser", "@babel/eslint-parser"] } } - 注意:
babel-eslint已废弃,但@babel/eslint-parser在 SublimeLinter 中兼容性差;真要稳定 lint,换 VS Code 更省心
Emmet 在 JSX 里不生效?得手动加 syntax_scopes
Emmet 默认只在 HTML 作用域触发,JSX 文件里敲 div.myClass + Tab 没反应,是因为它没被识别为可展开的 JS 语法上下文。
- 进
Preferences → Package Settings → Emmet → Settings,user 设置中加:{ "syntax_scopes": { "javascript": ["source.js", "source.jsx", "source.js.jsx"] } } - 重启 Sublime 或重载 Emmet 插件(
Cmd+Shift+P→Emmet: Reload) - 验证:在 JSX 的
return (后输入div.container+ Tab,应生成<div className="container"></div> - 注意:Emmet 不处理
{}内的 JS 表达式,只管标签结构
别指望自动补全 useState 或跳转到 React 源码
Sublime 没有语言服务器(LSP)支持,所有“补全”都是基于正则或静态词典,对 Hooks、props、自定义 Hook 完全无感。
-
useState、useEffect不会自动提示;可手动建 snippet(Tools → Developer → New Snippet…),设 tabTrigger 为us展开基础模板 -
import React from 'react'后按 Ctrl+Click 无法跳转定义——Sublime 不解析模块依赖,也不读node_modules/react/index.d.ts -
AutoFileName对node_modules下包名补全极弱,import { debounce } from 'lodash'这种别依赖它,手敲更稳 - 真正查 API,用
Cmd+P搜react.development.js或直接看官网文档
最常被忽略的一点:JSX 不是语法糖,是 React.createElement() 调用。Sublime 再怎么配高亮,也不会提醒你 key 缺失、setState 异步陷阱,或 Hooks 规则错误——这些得靠 ESLint 规则、浏览器 DevTools 和人脑。

















