mcpField
D
deno-expert

deno-expert

github.com/denoland开发102544 次安装13 周前更新
代码仓库

关于 deno-expert

deno-expert 是面向 Deno 特定问题的知识技能,涵盖代码评审、调试、项目配置和软件包选择。它明确区分其他运行时,并提供有关 Deno、Fresh、JSR 和内置工具的指导。

主要功能

  1. 01评审 Deno 和 Fresh 代码
  2. 02排查 Deno 运行时及配置问题
  3. 03提供软件包选择和项目配置建议
  4. 04遵循 Deno 专属适用范围
  5. 05检查导入、权限和代码质量

适用场景

  1. 01评审 Fresh 应用
  2. 02诊断 Deno 权限或 TypeScript 错误
  3. 03为 Deno 项目选择依赖
  4. 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 安全执行代码

软件包推荐原则

推荐或审查软件包选择时:

  1. 首选: jsr: 软件包(例如 jsr:@std/http)
  2. 次选: 没有 JSR 替代方案时使用 npm: 软件包
  3. 绝不推荐旧版基于 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 的导入时,指出这一点,并引导用户:

  1. 在 jsr.io 上查找软件包
  2. 运行 deno add jsr:@package/name
  3. 使用裸模块说明符

只展示正确的做法:

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"
  }
}

文档资源

需要更多信息时,请查阅:

使用 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

评论

支持 Markdown