sublime text 不自动编译 typescript,需手动配置 tsserver 路径、语法标识(typescript)、构建系统 selector 为 "source.ts" 及正确 working_dir,并确保 tsconfig.json 存在;否则仅剩语法高亮。

Sublime Text 本身不编译 TypeScript,保存 .ts 文件不生成 .js 是设计如此,不是配置失败;所有类型检查、跳转、补全、编译都依赖你本地的 tsc 和 tsserver,且必须显式配置路径、语法标识和构建系统才能生效。
为什么点击 Ctrl+S 没有自动生成 .js 文件
这是 Sublime 的默认行为:LSP 插件(如 LSP-typescript)只启动 tsserver 提供语言功能,它不调用 tsc 编译。哪怕状态栏显示 LSP: tsserver,也和编译完全无关。
- 别把语法高亮或波浪线错误当成“已编译”——打开文件系统确认
.js是否真实存在 - 如果用了
npx tsc,但项目里没有package.json或node_modules/typescript,npx会 fallback 到全局 TS 版本,可能与tsconfig.json不兼容 -
tsc从不自动运行;编译必须手动触发(Ctrl+B)或由监听插件(如LiveBuild)驱动
如何让 .ts 文件正确识别并高亮
Sublime 默认不绑定 .ts 后缀,装了插件也不代表自动生效。关键在语法注册和手动指定。
使用 Vite 8、React 19、Tailwind CSS v4、shadcn/ui、Biome、Vitest 和 Hono 构建全栈 TypeScript 应用,涵盖前端(Vite/Rolldown 构建 + 开发)...
- 必须安装
TypeScriptSyntax(作者 sublimelsp),不是Typescript Syntax或已废弃的TypeScript-Sublime-Plugin—— 后两者用的是 ST4 不支持的.tmLanguage格式 - 安装后务必重启 Sublime Text 4,否则新语法定义不会被扫描加载
- 打开任意
.ts文件 → 点击右下角语法名(如 “Plain Text”)→ 手动选 “TypeScript”(不是 “JavaScript” 或 “Babel”) - 若列表无 “TypeScript”,检查
Packages/User/下是否有残留的TypeScript.sublime-syntax空文件,删掉它 - 可在
Preferences → Settings – Syntax Specific中加:"extensions": ["ts", "tsx"],让新建文件也自动匹配
构建系统必须匹配 source.ts 语法标识
Sublime 构建系统靠 selector 字段激活,不是靠文件后缀。写成 "selector": "source.ts" 才有效,其他写法(如 typescript、.ts、带空格或引号外多余字符)都会失效。
- 确保
.ts文件右下角显示的是 “TypeScript”,否则构建根本不会触发 - 推荐构建配置中
"working_dir": "${project_path:${folder}}",而非"$file_path"—— 否则tsconfig.json可能无法被定位 - Windows 用户注意:
cmd必须写成["npx", "tsc.cmd", "$file"],不能用tsc;GUI 环境下npx无法解析可执行后缀 - LiveBuild 监听需严格复用同一构建系统:它的
selector、cmd、working_dir必须和构建系统内容完全一致
tsserver_path 配错会导致所有语言功能静默失效
语法高亮只是着色,跳转、补全、报错都靠 tsserver 进程。路径填错或留空,服务就起不来,且没有任何报错提示——这是最常被忽略的致命点。
-
tsserver_path必须指向tsserver.js(不是tsserver可执行文件),例如:"./node_modules/.bin/tsserver"(macOS/Linux)或"./node_modules/.bin/tsserver.cmd"(Windows) - 路径是相对于 Sublime 打开的文件夹(即项目根目录),不是 Sublime 安装路径
- 终端执行
tsc --version和tsserver --version输出必须一致;若后者报command not found,说明node_modules/.bin没进系统PATH - 项目根目录必须有
tsconfig.json,否则tsserver降级为无配置模式,strict、paths、jsx全部失效
真正卡住人的地方往往不是“没装插件”,而是 tsserver_path 指向了不存在的路径、selector 写错大小写、或者以为装完插件就自动绑定了语法——这些细节不验证,整个环境就只剩高亮。










