sublime text 本身不支持 js 高级语法(如?.、??)的原生校验,必须依赖 eslint;jshint 因停止维护且解析器不识别新语法,无法校验可选链等特性。

Sublime Text 本身不支持 JS 高级语法(比如 ?.、??、import.meta、Top-level await、装饰器等)的原生校验,必须靠 ESLint —— JSHint 已停止维护,对 ES2020+ 语法支持极弱甚至报错,装了也白装。
为什么 JSHint 校验不了可选链或空值合并?
JSHint 最后一个稳定版是 v2.13.6(2022 年发布),之后未跟进 ECMAScript 新特性。它解析 obj?.prop 会直接报 Unexpected token '.',不是配置问题,是解析器根本不认识这个语法。
- ESLint 则持续更新,只要配好
parserOptions.ecmaVersion和合适的 parser(如@babel/eslint-parser或@typescript-eslint/parser),就能识别所有现行标准语法 - JSHint 的
.jshintrc里加"esversion": 2022无效,该字段仅控制部分宽松规则,不扩展语法树能力 - 即使强行用
jshint --verbose跑 CLI,遇到??也会卡在词法分析阶段,SublimeLinter-jshint 插件只会静默跳过整行
SublimeLinter-eslint 安装与 Node.js 路径配置
SublimeLinter-eslint 不自带 ESLint,只调用你系统里已安装的 eslint 命令。它失败时通常不报错,只是不亮灯 —— 所以第一步永远是验证命令行是否真能跑:
- 终端执行
eslint --version,输出v8.56.0或更高(2026 年推荐用 v8.50+)才算通过 - 如果提示
command not found,说明没全局安装:npm install -g eslint(Windows 管理员 CMD;macOS/Linux 用npm config get prefix查路径,确保该路径在PATH中) - Sublime Text GUI 启动时环境变量常和终端不一致,尤其 macOS:打开
Preferences → Package Settings → SublimeLinter → Settings – User,写死 Node 路径,例如:"eslint": { "executable": "/opt/homebrew/bin/eslint", "env": {"PATH": "/opt/homebrew/bin:/usr/local/bin"} } - 若项目用了
pnpm或yarn管理依赖,且 ESLint 是本地安装(node_modules/.bin/eslint),则executable必须指向该项目下的二进制,不能依赖全局
让 ESLint 支持可选链、装饰器等语法的关键配置
光有 ESLint 命令还不够,必须告诉它用哪个 parser 解析代码。默认的 Espree 解析器只支持到 ES2022,对实验性语法(如装饰器)直接抛错。
- 装解析器:
npm install -D @babel/eslint-parser(兼容所有 Babel 支持的语法)或npm install -D @typescript-eslint/parser(TS/JS 混合项目) - 在项目根目录放
.eslintrc.js,关键项不能少:module.exports = { parser: '@babel/eslint-parser', parserOptions: { requireConfigFile: false, babelOptions: { presets: ['@babel/preset-env'] }, ecmaVersion: 'latest', sourceType: 'module' } }; - SublimeLinter-eslint 默认不读取
.eslintrc.js里的parser配置,必须显式启用:在插件 Settings – User 里加"args": ["--config", "/full/path/to/.eslintrc.js"],路径必须绝对,且开头不能漏/ - 装饰器语法需额外开开关:
ecmaFeatures: { decorators: true },否则@Component会被判为非法 token
常见静默失效场景与绕过技巧
“装完没反应”是高频问题,本质是某一层链路断了,但插件不提示。最有效的排查顺序是:
- 关掉 Sublime,终端跑
eslint --no-eslintrc --rule 'no-console: error' your-file.js—— 如果这都报错,说明 ESLint 本身有问题 - 打开 Sublime,按
Ctrl+Shift+P(macOSCmd+Shift+P),输SublimeLinter: Show All Errors,看是否真有输出;没有就说明 lint 过程根本没触发 - 检查文件右下角语法标识是不是
JavaScript,不是的话右键 →Set Syntax → JavaScript,SublimeLinter 默认只对source.jsscope 生效 - 若用
eslint --fix自动修复,必须在插件设置里明确写"args": ["--fix"],且lint_mode设为"background"或"load","save only"模式下不会实时标红
真正麻烦的是多项目混用不同 ESLint 版本或 parser,这时全局配置会冲突。最稳的做法:每个项目单独配 executable 和 args,不依赖 SublimeLinter 的默认查找逻辑。











