deno在vscode跑不起来主因是deno.enable未启用、deno.path配置错误或权限未显式声明;需确认vscode集成终端中which deno有效,右下角显示deno版本号,并避免与typescript插件冲突。

Deno 在 VSCode 里跑不起来,大概率不是插件没装,而是 deno.enable 没开、deno.path 指错了,或者权限没显式声明——VSCode 不会帮你绕过 Deno 的安全模型。
确认 deno 命令在终端和 VSCode 内都可用
VSCode 启动时会继承 shell 环境变量,但 GUI 方式打开的 VSCode(比如从 Dock 点开)常读不到 ~/.zshrc 或 ~/.bash_profile 里的 PATH。直接在终端执行 deno --version 能输出版本,不代表 VSCode 里也能调用。
- 在 VSCode 里按
Ctrl+Shift+`打开集成终端,运行which deno;如果返回空或报错,说明 VSCode 没加载到 Deno 路径 - macOS 用户常见路径是
$HOME/.deno/bin/deno,Homebrew 安装则是/opt/homebrew/bin/deno(Apple Silicon)或/usr/local/bin/deno(Intel) - 把对应路径填进工作区
.vscode/settings.json:"deno.path": "/opt/homebrew/bin/deno" - 改完保存,重启 VSCode 窗口(
Cmd+Shift+P→Developer: Reload Window),再检查右下角是否显示 Deno 版本号
启用 deno.enable 并避免与 TypeScript 插件冲突
装完插件默认是禁用状态,deno.enable 必须设为 true,否则编辑器当普通 TS 文件处理,Deno.cwd()、Deno.readTextFile() 这类 API 就没有类型提示,也报“无法找到名称”错误。
- 推荐在项目根目录创建
.vscode/settings.json,写入:{"deno.enable": true}—— 不要只在用户设置里全局开启,容易和 Node.js 项目冲突 - 如果看到警告
Setting 'typescript.tsserver.experimental.enableProjectDiagnostics' is incompatible with the Deno extension,就去用户设置里关掉这个选项,或删掉它 - 已有
tsconfig.json的项目,建议删掉它或重命名为tsconfig.json.disabled;Deno 不读这个文件,留着反而触发 TS 服务抢权
运行 deno run 时 PermissionDenied 错误怎么解
VSCode 本身不运行代码,只是调起终端执行 deno run。报 PermissionDenied 不是配置问题,是 Deno 的强制安全机制:网络、文件、环境变量等操作必须显式授权。
- 错误示例:
error: Uncaught (in promise) PermissionDenied: network access to "https://httpbin.org/json", run again with the --allow-net flag - 不能靠插件“自动加 flag”,必须手动加:在终端里运行
deno run --allow-net --allow-read main.ts - 如果用 Code Runner 插件,需修改其配置:
"code-runner.executorMap": {"typescript": "deno run --allow-net --allow-read"} - 更可持续的做法是建
deno.json,写入:{"tasks": {"start": "deno run --allow-net --allow-read main.ts"}},然后用deno task start运行
调试断点不生效?检查 launch.json 和 deno.enable
VSCode 调试 Deno 脚本依赖两个前提:Deno 语言服务已激活(即 deno.enable: true),且 launch.json 的 runtimeExecutable 指向正确的 deno 二进制。
- 首次按
Ctrl+Shift+D→ “create a launch.json file” → 选 Deno,自动生成的配置里runtimeExecutable默认是"deno",它依赖 PATH;如果 PATH 不对,就改成绝对路径,比如"/opt/homebrew/bin/deno" - 断点打在
await fetch()或Deno.serve()这类异步入口处,比打在console.log更容易验证是否连通 - 如果调试器启动后立刻退出,看调试控制台输出:若报
Cannot connect to runtime process,八成是deno.enable为 false 或deno.path不可执行
最易被忽略的一点:Deno 的模块解析完全依赖 URL 或本地路径,不走 node_modules。哪怕你只写了一行 import { serve } from "https://deno.land/std@0.205.0/http/server.ts";,VSCode 也要能联网下载并缓存该模块——第一次打开文件时右下角显示“Downloading…”是正常现象,别误以为卡死。等提示消失、类型提示出现,才算真正 ready。











