Node.js版本低于18.12会导致typescript-language-server启动失败,表现为LSP日志仅显示exit code 1、无“server started”记录;需升级至v18.12+(推荐v20),并通过LSP配置env字段显式指定Node路径确保Sublime加载正确版本。

Node.js 版本太低导致 typescript-language-server 启动失败
Sublime 的 LSP 插件本身不检查 Node.js 版本,但 typescript-language-server(以及 pyright 的 Node.js 版本分发版)在 v1.10+ 后已要求 Node.js ≥ 18.12。若你用的是 Node.js 16 或更早版本,typescript-language-server --stdio 会直接退出,控制台只显示 exit code 1,LSP 日志里看不到启动成功标记。
- 运行
node -v确认当前版本;低于v18.12.0就必须升级 - 不要用系统自带的旧版 Node(如 Ubuntu 22.04 默认的 v16.15),哪怕
npm install -g typescript-language-server成功,运行时也会因 ES module 语法或globalThis缺失而崩溃 - 推荐用 nvm 管理:安装后执行
nvm install 20→nvm use 20→ 再全局重装npm install -g typescript-language-server - Windows 用户注意 PATH:如果用了 nvm-windows 或手动换版本,确保 Sublime 启动时读取的是新 Node 路径——最稳方式是配置 LSP 的
command为绝对路径,例如["C:/Program Files/nodejs/node.exe", "C:/Users/xxx/AppData/Roaming/npm/node_modules/typescript-language-server/lib/cli.js", "--stdio"]
LSP 配置里没指定 node_path,导致找不到新版 Node
Sublime Text 启动时继承的是系统登录会话的环境变量,不是你终端里 nvm use 后的环境。所以即使终端里 node -v 显示 v20,Sublime 可能仍在用旧版 Node。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- 别依赖 PATH,直接在
Preferences → Package Settings → LSP → Settings的clients下为 TypeScript 单独加env字段:
{
"typescript": {
"command": ["typescript-language-server", "--stdio"],
"env": {"PATH": "/home/xxx/.nvm/versions/node/v20.15.0/bin:/usr/bin"},
"scopes": ["source.js", "source.ts", "source.jsx", "source.tsx"],
"syntaxes": ["Packages/JavaScript/JavaScript.sublime-syntax"]
}
}
~/.nvm/versions/node/v20.15.0/bin;Windows 用户写完整盘符路径,且避免空格(如 C:\nvm\v20.15.0\bin)env 只影响该语言服务器进程,不影响其他插件,安全且精准用了 LSP-pyright 但底层仍走 Node.js,也被旧版 Node 拖垮
LSP-pyright 插件虽标称“Python”,但它分发的 pyright 是 Node.js 运行时打包版(尤其 Windows 安装包)。如果你没用 pip install pyright,而是靠插件自动下载,那它内部调用的仍是系统 Node。
- 验证方式:打开控制台(
Ctrl+`),输入view.settings().get("syntax")确保是 Python 语法;再搜pyright日志,若看到Error: Cannot find module 'fs/promises',就是 Node.js 太老 - 绕过 Node 依赖:卸载
LSP-pyright,改用 pip 安装原生版:pip install pyright(支持 PyPy/CPython,不依赖 Node) - 然后在 LSP 全局设置里删掉
LSP-pyright相关配置,新增纯 Python 的 client:
"pyright": {
"command": ["pyright", "--stdio"],
"enabled": true,
"languageId": "python",
"scopes": ["source.python"],
"syntaxes": ["Packages/Python/Python.sublime-syntax"]
}
重启 Sublime 后 LSP: ready 不出现,其实是 Node 进程静默退出
这不是配置没生效,而是语言服务器进程启动即崩,LSP 插件捕获到非零退出码后就放弃重试,状态栏永远卡在 Plain Text。
- 最关键的排查动作:打开控制台(
Ctrl+`),清空后打开一个.ts文件,立刻看是否有类似这样的日志: -
LSP: starting server "typescript"→ 出现说明配置被读取 - 紧接着没有
LSP: server "typescript" started,反而有server crashed on startup或空白行 → 基本锁定 Node 版本问题 - 不要只看右下角状态,它只反映“是否连上”,不反映“是否活下来”
- 临时验证法:把
command改成["node", "--version"],保存后开 .ts 文件——如果状态栏变成LSP: ready并弹出提示框显示 v20.x,那就 100% 是原typescript-language-server二进制不兼容

















