deno.enable必须设为true才能启用deno语言服务器,否则类型提示、跳转定义、deno.cwd()补全全部失效;需在工作区.vscode/settings.json中配置,不可设于用户全局设置,验证方式为输入fetch或deno.查看是否出现完整签名与方法补全。

deno.enable 必须设为 true,否则 VSCode 不会启动 Deno 语言服务器——类型提示、跳转定义、Deno.cwd() 补全全部失效,这不是插件没装好,是开关根本没打开。
deno.enable 怎么开才有效
VSCode 安装完 vscode-deno 插件后,默认处于禁用状态。它不会自动接管当前工作区的 TypeScript 服务,也不会加载 Deno 内置类型定义。
必须在工作区(而非用户全局)设置中启用,方式有两种:
- 命令面板(
Cmd+Shift+P或Ctrl+Shift+P)运行Deno: Initialize Workspace Configuration,它会自动生成.vscode/settings.json并写入{"deno.enable": true} - 手动创建或编辑项目根目录下的
.vscode/settings.json,只加这一行:"deno.enable": true - 切勿写进用户设置(
settings.json在~/Library/Application Support/Code/User/或%APPDATA%\Code\User\),否则所有 JS/TS 项目都会被强制走 Deno 类型检查,require()、process.env等 Node.js API 就会报错
验证是否生效:打开任意 .ts 文件,输入 fetch,悬停应显示完整签名;输入 Deno.,应出现 readTextFile、cwd 等方法补全。
deno.path 配置错误导致“command 'deno.client.restart' not found”
这个错误不是插件崩溃,是 VSCode 根本找不到本地 deno 可执行文件。常见于 macOS GUI 启动(双击 Dock 图标)、Windows 从开始菜单启动等场景——它们不继承 shell 的 PATH,即使终端里 deno --version 能跑,VSCode 里也调不到。
解决步骤:
- 在 VSCode 集成终端(
Ctrl+`)中运行which deno(macOS/Linux)或where deno(PowerShell/Windows Terminal),拿到真实路径,例如/opt/homebrew/bin/deno或$HOME/.deno/bin/deno - 把该绝对路径填进工作区
.vscode/settings.json:"deno.path": "/opt/homebrew/bin/deno" - 不要用
~、环境变量或符号链接路径;Homebrew 安装的 Deno 常带符号链接,which输出的是解析后的最终路径,直接复制最稳 - 改完保存,执行
Cmd+Shift+P→Developer: Reload Window,再看右下角状态栏是否显示Deno: v1.42.0(版本号)
deno run 报 PermissionDenied 不是配置问题
VSCode 编辑器本身不运行代码,它只是调起终端执行 deno run。报 Uncaught (in promise) PermissionDenied: network access to "https://..." 这类错误,和 deno.enable 或 deno.path 完全无关,是 Deno 运行时强制安全模型在起作用。
编辑器能提示 fetch 类型、能跳转标准库源码,不代表你有权执行它——权限必须显式声明:
-
deno run main.ts默认拒绝所有敏感操作(网络、文件读写、环境变量、插件加载等) - 要发起请求,必须加
--allow-net;要读文件,加--allow-read;要访问环境变量,加--allow-env - 如果用
Code Runner插件,需在用户或工作区设置中修改"code-runner.executorMap",把deno run替换为deno run --allow-net --allow-read - VSCode 的调试器(
launch.json)也需在args字段里显式传入这些 flag,否则断点跑起来照样 PermissionDenied
deno.json 不是摆设,但空文件没用
一个空的 {} deno.json 文件,仅能让插件识别这是 Deno 项目;lint、fmt、test、import map 等功能都不会激活——它们依赖对应字段的显式声明。
常见必要字段:
-
"lint": { "rules": { "tags": ["recommended"] } }→ 启用编辑器内联 lint 提示(如禁止any、未使用变量) -
"fmt": { "useTabs": false, "lineWidth": 100 }→ 保存时自动格式化,且行为与 CLI 的deno fmt一致 -
"importMap": "./import_map.json"→ 若项目用了导入映射,必须在这里声明,否则跳转定义失败、类型提示丢失 -
"tasks": { "start": "deno run --allow-net main.ts" }→ 配合 VSCode 任务系统(Cmd+Shift+P→Tasks: Run Task)可一键启动带权限的脚本
删掉 tsconfig.json —— Deno 不读它,留着反而会让 TypeScript 语言服务抢权,导致类型提示错乱或补全失效。











