vscode中deno跑不起来的主因是deno.enable未启用、deno.path配置错误或运行时缺权限;必须手动在工作区settings.json中设"deno.enable": true,用which deno获取真实路径配置deno.path,并显式添加--allow-net等权限标志。

VSCode 里 Deno 跑不起来,90% 的问题出在 deno.enable 没开、deno.path 指错了,或者运行时缺权限——不是插件没装,是它根本没启动,或启动了但连不到 deno 命令。
deno.enable 必须手动设为 true,且只写在工作区设置里
插件安装完默认禁用语言服务,这是故意的:避免在 Node.js 或普通 TS 项目里误触发 Deno 类型检查,导致 fetch、Deno.cwd() 这类 API 被错误识别甚至覆盖内置类型。
- 打开命令面板(
Cmd+Shift+P或Ctrl+Shift+P),输入并执行Deno: Initialize Workspace Configuration,它会自动生成.vscode/settings.json并写入"deno.enable": true - 别往用户全局设置里加这个字段,否则所有 JS/TS 项目都会被强制走 Deno 类型检查,Node 项目立刻报错
- 验证是否生效:打开一个
.ts文件,输入fetch,如果出现完整签名和文档提示,说明已激活 - 已有
tsconfig.json的项目,建议删掉或重命名为tsconfig.json.disabled;Deno 不读它,留着反而让 TS 服务抢权
deno.path 配置失败会导致 “command 'deno.client.restart' not found”
这个错误不是插件坏了,是 VSCode 根本找不到本地 deno 可执行文件。常见于 macOS GUI 启动(比如从 Dock 点开)、PATH 没继承,或路径写错。
- 先在终端运行
deno --version,确认能输出版本号 - 再在 VSCode 集成终端(
Ctrl+`)里运行一次;如果报command not found,说明 VSCode 没加载到 shell 的 PATH - 执行
which deno(macOS/Linux)或where deno(Windows PowerShell)拿到真实路径,例如/opt/homebrew/bin/deno(Apple Silicon)或$HOME/.deno/bin/deno - 把该路径填进工作区
.vscode/settings.json:"deno.path": "/opt/homebrew/bin/deno";不要用~或环境变量,直接写绝对路径最稳 - 改完保存,执行
Developer: Reload Window重启窗口,再看右下角是否显示Deno (v1.x)
PermissionDenied 错误不能靠插件绕过,必须手动加 flag
VSCode 只负责类型提示和编辑支持,不参与代码执行。写完 fetch("https://") 编辑器不报错,不代表能跑通——Deno 的权限模型在运行时强制校验。
- 错误示例:
error: Uncaught (in promise) PermissionDenied: network access to "https://httpbin.org/json" - 解决方式:在终端里显式加权限,例如
deno run --allow-net --allow-read main.ts - 如果用 Code Runner 插件,需修改其配置:
"code-runner.executorMap"中对应typescript的命令,把deno run改成带 flag 的完整命令 - 调试时更要注意:
launch.json的runtimeArgs必须包含--allow-net、-A(全权限)等,漏掉就直接退出 -
-A是快捷方式,但生产环境不推荐;测试阶段可用,开发中建议按需拆分,比如--allow-env --allow-read --allow-net
deno.json 不是摆设,lint / fmt / import_map 都靠它驱动
空的 deno.json 只启用基础支持;要让格式化、代码检查、跳转定义真正生效,必须显式声明字段,否则 VSCode 插件不会加载对应功能。
-
"fmt": { "useTabs": false, "lineWidth": 100 }才能让保存时自动格式化,且行为和 CLI 的deno fmt一致 -
"lint": { "rules": { "tags": ["recommended"] } }才触发内联 lint 提示(如禁止any类型) - 用了
import_map.json?必须在deno.json里声明:"importMap": "./import_map.json",否则跳转定义会失败 - 如果写了
deno.json,插件就完全按它来,不再“猜”默认行为;删掉某个字段(比如"semiColons": false),格式化结果就会回退到 CLI 默认值
最常被忽略的是:VSCode 启动方式影响 PATH 加载,尤其 macOS 上双击图标打开根本读不到 ~/.zshrc;还有人把 deno.path 写成软链接路径,而插件需要的是 which deno 解析后的最终路径。











