sublime text 3 保存 .ts 文件不生成 .js 是设计使然,并非配置失败;必须显式配置构建系统(selector 严格为 "source.ts")、正确设置 working_dir 和 tsc 路径,并通过 ctrl+b 或 livebuild/onsavebuild 触发编译,lsp 插件不参与编译。

Sublime Text 3 本身不自动编译 TypeScript——保存 .ts 文件没生成 .js 是设计如此,不是配置失败。必须显式配置构建系统 + 正确触发机制,否则永远等不到输出文件。
构建系统必须匹配 source.ts 语法标识
Sublime 不靠文件后缀(如 .ts)决定是否启用构建,而是靠当前文件的 syntax selector。如果右下角显示的是 Plain Text 或 JavaScript,哪怕文件名是 index.ts,Ctrl+B 也不会调用 tsc。
- 打开任意
.ts文件 → 点击右下角语法名 → 手动选TypeScript(不是Babel、JSX或其他变体) - 若列表中没有
TypeScript,需先通过Package Control: Install Package安装TypeScriptSyntax(轻量)或官方TypeScript插件 - 构建系统中
"selector": "source.ts"必须严格小写、无空格、无多余引号或字符;写成typescript、.ts、source.typescript都无效
tsc 命令路径和工作目录要对得上
常见报错 [WinError 2] 系统找不到指定的文件 或构建静默失败,基本都卡在这两处。
- Windows 下建议用绝对路径,运行
where tsc查到结果(例如C:UsersXXXAppDataRoaming pm sc.cmd),然后在构建系统里写死:"cmd": ["C:\Users\XXX\AppData\Roaming\npm\tsc.cmd", "$file"] -
working_dir推荐设为"${project_path:${folder}}",而不是"$file_path";否则tsconfig.json可能无法被识别,导致编译选项(如outDir)不生效 - 如果用了
npx tsc,但项目里没package.json或node_modules/typescript,npx会 fallback 到全局 TS 版本,而全局版本可能与项目tsconfig.json中的target或lib不兼容
LiveBuild / OnSaveBuild 监听必须复用已有构建系统
LiveBuild 不自己执行命令,它只是监听保存动作后,去“调用你已定义好的构建系统”。配置错一个字段,监听就彻底失效。
- LiveBuild 用户设置中,
"selector"必须和构建系统的"selector"完全一致(即"source.ts") -
"cmd"字段不能重复写命令,应留空或直接删掉;它会自动复用当前激活的构建系统,硬写反而可能覆盖或冲突 - OnSaveBuild 的用户设置里,
"filename_filter": "\.(ts)$"是正则,注意双反斜杠;同时确保"build_on_save": 1(不是true或"true") - 别同时装多个监听插件(比如 LiveBuild + OnSaveBuild),它们会互相劫持,导致构建不触发或报错不提示
tsconfig.json 要放在正确位置并被识别
没 tsconfig.json 也能编译单文件,但一旦项目结构变复杂(比如有 outDir、include、baseUrl),缺失或路径错就会让输出乱套。
-
tsconfig.json必须放在项目根目录(即${project_path}所指位置),且构建系统的working_dir必须能抵达该路径 - 构建命令推荐用
["tsc", "-p", "."]而非["tsc", "$file"],前者强制走项目配置,后者只编译当前文件、忽略tsconfig.json里的outDir和composite等关键项 - 检查
tsc -p . --noEmit是否报错:如果命令行能跑通但 Sublime 编译失败,大概率是构建系统没读到tsconfig.json,优先查working_dir
最容易被忽略的点是:LSP 插件(比如 LSP-typescript)只提供语法诊断和跳转,和编译完全无关。右下角显示 LSP: tsserver ≠ 已编译。务必打开生成的 .js 文件确认是否存在,而不是只看波浪线或 LSP 状态。










