本页内容

贡献

我们欢迎并感谢您对 Deno 的所有贡献。

此页面旨在帮助您开始贡献。

项目 跳转到标题

denoland 组织中,有许多存储库是 Deno 生态系统的一部分。

存储库具有不同的范围,使用不同的编程语言,并且在贡献方面难度各不相同。

为了帮助您决定哪个存储库最适合您开始贡献(或符合您的兴趣),这里有一个简短的比较(**代码库主要包含以下语言**)

deno 跳转到标题

这是提供 deno CLI 的主要存储库。

如果您想修复 deno 中的错误或添加新功能,那么这就是您要贡献的存储库。

一些系统,包括 Node.js 兼容性层的大部分,都是用 JavaScript 和 TypeScript 模块实现的。如果您想进行首次贡献,这些模块是一个不错的起点。

在迭代这些模块时,建议在您的 cargo 标志中包含 --features __runtime_js_sources。这是一种特殊的开发模式,其中 JS/TS 源代码不会包含在二进制文件中,而是在运行时读取,这意味着如果它们发生更改,则无需重新构建二进制文件。

要使用以下命令,您需要首先在您的系统上安装必要的工具,如 这里 所述。

# cargo build
cargo build --features __runtime_js_sources

# cargo run -- run hello.ts
cargo run --features __runtime_js_sources -- run hello.ts

# cargo test integration::node_unit_tests::os_test
cargo test --features __runtime_js_sources integration::node_unit_tests::os_test

还要记住在您的编辑器设置中引用此功能标志。对于 VSCode 用户,将以下内容组合到您的工作区文件中

{
  "settings": {
    "rust-analyzer.cargo.features": ["__runtime_js_sources"]
  }
}

语言:RustJavaScriptTypeScript

deno_std 跳转到标题

Deno 的标准库。

语言:TypeScript、WebAssembly

fresh 跳转到标题

下一代 Web 框架。

语言:TypeScript、TSX

deno_lint 跳转到标题

deno lint 子命令提供支持的 linter。

语言:Rust

deno_doc 跳转到标题

deno doc 子命令和 https://doc.deno.land 提供支持的文档生成器。

语言:Rust

docland 跳转到标题

文档生成器的前端:https://doc.deno.land

语言:TypeScript、TSX、CSS

rusty_v8 跳转到标题

V8 JavaScript 引擎的 Rust 绑定。非常技术性和低级别。

语言:Rust

serde_v8 跳转到标题

提供 V8 和 Rust 对象之间双射层的库。基于 serde 库。非常技术性和低级别。

语言:Rust

deno_docker 跳转到标题

Deno 的官方 Docker 镜像。

一般说明 跳转到标题

  • 阅读 风格指南

  • 请不要使 基准测试 变差。

  • 社区聊天室 中寻求帮助。

  • 如果你打算处理某个问题,请在开始处理问题之前在该问题的评论中提及。

  • 如果你打算开发新功能,请在开始开发功能之前创建问题并与其他贡献者讨论;我们感谢所有贡献,但并非所有提议的功能都会被接受。我们不希望你花费数小时开发可能不被接受的代码。

  • 请在论坛中保持专业。我们遵循 Rust 的行为准则 (CoC)。有问题?请发送邮件至 ry@tinyclouds.org

提交拉取请求 跳转到标题

在向任何仓库提交 PR 之前,请确保已完成以下操作

  1. 为 PR 提供描述性的标题。

好的 PR 标题示例

  • fix(std/http): 修复服务器中的竞争条件
  • docs(console): 更新文档字符串
  • feat(doc): 处理嵌套的重新导出

不好的 PR 标题示例

  • fix #7123
  • 更新文档
  • 修复错误
  1. 确保存在相关问题,并在 PR 文本中引用该问题。
  2. 确保有测试覆盖更改。

deno 提交 PR 跳转到标题

除了上述内容,请确保

要使用以下命令,您需要首先在您的系统上安装必要的工具,如 这里 所述。

  1. cargo test 通过 - 这将运行 deno 的完整测试套件,包括单元测试、集成测试和 Web 平台测试

  2. 运行 ./tools/format.js - 这将格式化所有代码,使其符合仓库中的一致风格

  3. 运行 ./tools/lint.js - 这将使用 clippy (针对 Rust) 和 dlint (针对 JavaScript) 检查 Rust 和 JavaScript 代码是否存在常见错误和错误

deno_std 提交 PR 跳转到标题

除了上述内容,请确保

  1. 你编写的代码全部使用 TypeScript (即不要使用 JavaScript)

  2. deno test --unstable --allow-all 通过 - 这将运行标准库的完整测试套件

  3. 在仓库根目录中运行 deno fmt - 这将格式化所有代码,使其符合仓库中的一致风格。

  4. 运行 deno lint - 这将检查 TypeScript 代码是否存在常见错误和错误。

fresh 提交 PR 跳转到标题

首先,请确保已 安装 Puppeteer。然后,请确保已运行 deno task ok 并成功通过。

记录 API 跳转到标题

记录所有公共 API 非常重要,我们希望在代码中内联进行记录。这有助于确保代码和文档紧密耦合在一起。

JavaScript 和 TypeScript 跳转到标题

所有公开的 API 和类型,无论是通过 deno 模块还是通过全局/window 命名空间,都应该具有 JSDoc 文档。此文档会被解析并提供给 TypeScript 编译器,因此很容易在后续提供。JSDoc 块位于它们所应用的语句之前,以 /** 开头,以 */ 结尾。例如

/** A simple JSDoc comment */
export const FOO = "foo";

在以下位置查找更多信息:https://jsdoc.node.org.cn/

Rust 跳转到标题

使用 本指南 在 Rust 代码中编写文档注释。