sublime text 需安装 sublimelsp + deno-lsp 插件、配置 "command": ["deno", "lsp"]、设置 deno_dir 缓存路径,并自定义构建系统添加 --allow-* 参数,才能正确识别 .ts 文件并支持 deno 类型检查与安全运行。

Sublime Text 本身不运行 Deno,它只是编辑器;所谓“安装 Deno 安全运行环境”,实际是配置 Sublime Text 使其能高效、安全地开发 Deno 项目——关键在语法支持、类型检查、权限意识和终端集成。
怎么让 Sublime Text 正确识别 .ts 文件并支持 Deno 类型检查
默认 Sublime Text 不知道 deno run 的类型规则,打开 .ts 文件会按普通 TypeScript 解析,报一堆“找不到模块”或“无法解析 URL 导入”的错。
- 必须装
Deno Language Server(LSP)插件,不是随便一个 TS 插件就行;推荐用SublimeLSP+deno-lsp配合,否则import { serve } from "https://deno.land/std@0.210.0/http/server.ts"这类远程导入会标红且无补全 - 启动 LSP 前,确保系统 PATH 里有
deno命令(deno --version能执行),否则 LSP 启动失败,日志里会报"deno" executable not found - 在 SublimeLSP 设置中显式指定
"command": ["deno", "lsp"],别依赖自动探测——Deno 的 LSP 不走标准tsserver协议
为什么直接运行 deno run 会失败,但终端里却正常
常见现象:写好 main.ts,按 Ctrl+B 构建,弹出错误 Uncaught PermissionDenied: read access to "/path/to/main.ts", run with --allow-read ——但你在终端里手动敲 deno run --allow-net --allow-read main.ts 就一切正常。
- Sublime Text 默认构建系统不带任何
--allow-*参数,Deno 沙箱拒绝所有敏感操作,这是设计使然,不是 bug - 要修复,得自定义构建系统:菜单 →
Tools→Build System→New Build System…,填入:{ "shell_cmd": "deno run --allow-net --allow-read --allow-env $file", "file_regex": "at (.*):([0-9]+):([0-9]+)", "selector": "source.ts" } - 注意:别全局加
--allow-all,开发时暴露权限等于绕过 Deno 最核心的安全机制;按需开,比如只读配置文件就只加--allow-read
如何避免 import URL 本地缓存混乱导致的类型失效
Deno 会把 https://deno.land/std@0.210.0/fs/read_text_file.ts 这类 URL 缓存到 $DENO_DIR/deps,但 Sublime Text 的 LSP 如果没同步这个缓存路径,就会提示“无法找到模块”。
- 确认
DENO_DIR环境变量已设置(如export DENO_DIR="$HOME/.deno"),并在 SublimeLSP 设置中通过"settings": { "deno.enable": true, "deno.cache": "$HOME/.deno" }显式告知 LSP 缓存位置 - 如果改过 Deno 版本(比如从
@0.200.0升级到@0.210.0),记得手动清空$DENO_DIR/deps下对应域名缓存,否则 LSP 可能加载旧版类型定义,导致serve()参数签名错乱 - 别用
deno cache命令预热时漏掉--reload:正确命令是deno cache --reload main.ts,否则 LSP 启动时仍可能读到 stale 缓存
真正难的不是配通,而是每次加新权限、换新版本、切新 std 标签时,都要同步更新构建参数、LSP 配置和缓存路径——Deno 的安全模型是硬约束,编辑器不会替你做取舍。











