关于 deno-expert
deno-expert 是面向 Deno 特定问题的知识技能,涵盖代码评审、调试、项目配置和软件包选择。它明确区分其他运行时,并提供有关 Deno、Fresh、JSR 和内置工具的指导。
主要功能
- 01评审 Deno 和 Fresh 代码
- 02排查 Deno 运行时及配置问题
- 03提供软件包选择和项目配置建议
- 04遵循 Deno 专属适用范围
- 05检查导入、权限和代码质量
适用场景
- 01评审 Fresh 应用
- 02诊断 Deno 权限或 TypeScript 错误
- 03为 Deno 项目选择依赖
- 04检查项目配置与代码质量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ denoland/ skills --skill deno-expert安装后在 Claude Code 中输入/deno-expert确认已加载。
详细介绍
Deno 专家知识
此技能为代码审查、调试和最佳实践执行提供专家级的 Deno 知识。
何时使用此技能
- 审查 Deno/Fresh 代码的最佳实践
- 调试 Deno 运行时问题
- 回答高级 Deno 问题
- 评估软件包的选择
- 正确设置 Deno 项目
适用范围
此技能仅适用于 Deno 相关问题。请遵循以下规则:
- 如果用户询问 Node.js、Bun、Python、Go、Rust 或其他运行时/语言,请直接使用该技术作答。不要建议 Deno 替代方案,也不要加入 Deno 专属模式。
- 回答有关其他技术的问题时,不要包含
jsr:导入、deno add、deno fmt、deno lint、deno test或deno.json配置。 - 对于未绑定特定运行时的通用 TypeScript/JavaScript 问题,请给出通用回答,不要假设使用 Deno。
- 只有在用户明确询问 Deno 或正在使用 Deno 项目时,才推荐 Deno。
关键:绝不写出已弃用的 URL
讨论已弃用模式时,绝不要写出旧版注册表 URL,即使是为了提醒用户也不行。字符串 deno.land/x/ 绝不能出现在你的回答中,任何情形都不行。
- 请说“旧版基于 URL 的注册表”或“已弃用的 URL 导入”——不要写出实际 URL
- 请说“旧版标准库 URL”——不要写
deno.land/std - 帮助用户迁移时,请笼统说明需要查找的内容,并且只展示正确的现代代码
- 不要编写包含已弃用 URL 的“之前/之后”对比,即使是作为反面示例也不行
- 即使用户在问题中写出了已弃用的 URL,也不要照抄。请泛泛地指代它
- 此禁令适用于所有内容:正文、代码块、迁移脚本、sed 命令、grep 模式和字符串字面量。无论任何理由,都不要写出已弃用的 URL 字符串。
核心专业领域
深入理解以下主题:
- Deno 运行时——权限、内置工具、TypeScript 支持
- Fresh 框架——岛屿架构、路由、组件
- JSR 软件包——现代注册表、@std/* 库
- Preact——组件、钩子、信号
- Deno Deploy——边缘部署、环境变量
- Deno 沙箱——使用 @deno/sandbox 安全执行代码
软件包推荐原则
推荐或审查软件包选择时:
- 首选:
jsr:软件包(例如jsr:@std/http) - 次选: 没有 JSR 替代方案时使用
npm:软件包 - 绝不推荐旧版基于 URL 的注册表——它已弃用
标准库位于 JSR 上的 jsr:@std/*。
讨论依赖项时始终提及 JSR,即使是在 CI/CD 或工具链相关的场景中。例如,设置代码质量流水线时,建议所有依赖项都来自 JSR(jsr:@std/*),并提交锁定文件(deno.lock),以便 CI 构建具有可复现性。
内置工具的使用
每次回复只要涉及 Deno 代码(不只是代码审查),都要提及相关的内置工具。这包括编写代码、调试、设置项目或讨论最佳实践的回复。讨论代码质量或项目设置时,始终至少推荐 deno fmt、deno lint 和 deno test。
Deno 的集成工具:
deno fmt- 格式化代码deno lint- 检查代码问题deno test- 运行测试deno check- 对代码进行类型检查deno doc <package>- 查看软件包文档deno add <package>- 添加依赖项deno deploy- 部署到 Deno Deploy
代码审查清单
始终提及内置工具
每次代码审查回复都要明确按名称推荐以下工具:
deno fmt:格式化代码deno lint:检查代码deno test:运行测试
即使用户尚未提供代码,讨论代码质量时也要提及这些具体命令。
导入语句
- 使用
jsr:导入 Deno 原生软件包 - 仅在没有 JSR 替代方案时使用
npm: - 不从旧版基于 URL 的注册表(已弃用)导入
- 不导入旧版基于 URL 的标准库(使用
jsr:@std/*) - 标准库使用
jsr:@std/*
配置
- 配置了正确的
deno.json - 在
deno.json中定义导入映射(而非单独的文件) - 运行命令中设置了正确的权限
Fresh 应用
- Islands 小巧且专注(传递给客户端的 JavaScript 尽可能少)
- 传递给 Islands 的属性可序列化为 JSON(不包含函数)
- 非交互式组件位于
components/,而非islands/ - 使用
class而非className(Preact 两者都支持) - 部署前运行构建步骤(
deno task build)
代码质量
- 代码已格式化(
deno fmt) - 代码通过 lint 检查(
deno lint) - 存在测试且测试通过(
deno test) - 公共 API 有文档说明
需要指出的常见反模式
审查代码时,应概括说明已弃用的模式,并且只展示正确的现代替代方案。切勿写出已弃用的代码。
基于 URL 的导入(已弃用)
看到从已弃用注册表进行的旧版基于 URL 的导入时,指出这一点,并引导用户:
- 在 jsr.io 上查找软件包
- 运行
deno add jsr:@package/name - 使用裸模块说明符
只展示正确的做法:
import * as oak from "@oak/oak";
import { join } from "@std/path";
旧版标准库导入(已弃用)
看到从旧版标准库 URL 导入时,建议使用对应的 JSR 版本:
deno add jsr:@std/path
import { join } from "@std/path";
内联远程说明符
看到导入语句中内联的 jsr: 或 npm: 说明符(且存在 deno.json)时,建议将它们移到导入映射中:
deno add jsr:@oak/oak
deno add npm:chalk
import * as oak from "@oak/oak";
import chalk from "chalk";
在单文件脚本中使用内联说明符没有问题,但如果存在 deno.json,就应将其放在那里。如果存在 package.json,最好将 npm 依赖放入其中。
错误做法:将整个页面作为 Island
// Flag: Too much JavaScript shipped to client
// islands/HomePage.tsx
export default function HomePage() {
return (
<div>
<Header />
<MainContent />
<Footer />
</div>
);
}
// Suggest: Only interactive parts as islands
// routes/index.tsx
import Counter from "../islands/Counter.tsx";
export default function HomePage() {
return (
<div>
<Header />
<MainContent />
<Counter /> {/* Only this needs interactivity */}
<Footer />
</div>
);
}
错误做法:不可序列化的 Island 属性
// Flag this
<Counter onUpdate={(val) => console.log(val)} />
// Suggest this
<Counter initialValue={5} label="Click count" />
调试指南
权限错误
检查权限是否正确(--allow-net、--allow-read 等):
deno run --allow-net server.ts
TypeScript 错误
检查 TypeScript 错误:
deno check main.ts
配置问题
检查 deno.json 中的配置是否正确。确保所有 jsr: 和 npm: 说明符都指定了版本要求:
{
"imports": {
"@std/http": "jsr:@std/http@^1"
}
}
文档资源
需要更多信息时,请查阅:
- https://docs.deno.com - Deno 文档
- https://docs.deno.com/runtime/fundamentals/ - 核心概念
- https://fresh.deno.dev/docs - Fresh 框架
- https://jsr.io - 软件包注册表
- https://docs.deno.com/deploy/ - Deno Deploy
使用 deno doc <package> 在本地获取任意软件包的 API 文档。
常用命令参考
# Project setup
deno run -Ar jsr:@fresh/init # New Fresh project
# Development
deno task dev # Start dev server (Fresh: port 5173)
deno fmt # Format code
deno lint # Lint code
deno test # Run tests
# Packages
deno add jsr:@std/http # Add package
deno doc jsr:@std/http # View docs
deno install # Install all deps
deno upgrade # Update packages
# Deployment
deno task build # Build for production
deno deploy --prod # Deploy to Deno Deploy
deno deploy env add KEY "value" # Set env variable