菜单

项目结构

相关源文件

本文全面概述了Deno的Rust工作区组织、crate架构和扩展系统。它涵盖了代码库的结构布局、主要组件之间的关系以及模块化扩展系统如何实现对Web标准的支持。

有关特定运行时引导过程的信息,请参阅引导过程。有关CLI命令处理的详细信息,请参阅命令处理

工作区组织

Deno组织为一个Rust工作区,包含47个成员crate,这些crate分为几个架构类别。该工作区对所有crate使用集中式依赖管理和共享构建配置。

工作区成员类别

工作区被划分为不同的功能组

类别目的示例Crate
核心CLI命令行界面和工具clicli/libcli/rtcli/snapshot
运行时JavaScript 执行环境runtimeruntime/featuresruntime/permissions
扩展Web API 实现ext/httpext/cryptoext/fetchext/node
解析器模块解析系统resolvers/denoresolvers/noderesolvers/npm_cache
实用工具共享工具和基准测试bench_utiltests/util/server
测试测试基础设施teststests/ffitests/napi

工作区架构图

来源:Cargo.toml3-47 cli/Cargo.toml1-210 runtime/Cargo.toml1-116

依赖管理策略

工作区采用集中式依赖管理,对通用依赖项使用共享版本规范。这确保了所有crate之间的一致性并简化了维护。

共享依赖配置

来源:Cargo.toml56-524 cli/Cargo.toml71-187 ext/http/Cargo.toml25-58

核心组件架构

Deno项目由三个主要的架构层组成,它们协同工作以提供完整的JavaScript运行时体验。

CLI层组件

CLI层提供用户界面并协调所有运行时操作。它由几个专门的crate组成

Crate包名称目的
clideno主二进制和命令调度器
cli/libdeno_lib共享CLI库代码
cli/rt未发布运行时二进制实用程序
cli/snapshotdeno_snapshotsV8快照管理

主CLI crate作为入口点,通过其工厂模式实现协调所有其他组件。

运行时层组件

运行时层提供核心JavaScript执行环境,并管理权限、功能和扩展注册

来源:runtime/Cargo.toml3-116 runtime/permissions/Cargo.toml runtime/features/Cargo.toml

扩展系统架构

扩展提供了Web标准和平台API的模块化实现。每个扩展都是一个独立的crate,可以独立开发和测试。

扩展类别和实现

类别扩展核心功能
Web 标准ext/webext/urlext/console核心Web API、URL解析、控制台实现
网络ext/httpext/fetchext/websocketext/netHTTP服务器/客户端、Fetch API、WebSocket、原始网络
安全ext/cryptoext/tlsWeb Crypto API、TLS实现
文件系统ext/fsext/io文件系统操作、I/O原语
Node.js 兼容性ext/nodeext/napiNode.js API polyfills、原生API支持
不稳定特性ext/kvext/cronext/canvas键值存储、定时任务、Canvas API

扩展注册流程

来源:runtime/Cargo.toml47-79 ext/http/Cargo.toml1-67 ext/crypto/Cargo.toml1-49

扩展实现模式

扩展遵循一致的模式,通过deno_core操作系统实现Web标准并提供JavaScript API。

标准扩展结构

每个扩展crate都遵循标准化的结构,将Rust实现与JavaScript接口代码分离

HTTP扩展示例

HTTP扩展展示了典型的扩展架构,包括其操作、JavaScript接口以及与更广泛生态系统的集成

HTTP扩展依赖和集成

来源:ext/http/Cargo.toml25-58 ext/http/lib.rs

Node.js兼容性扩展

Node.js兼容性扩展是最大、最复杂的扩展之一,为Node.js内置模块提供了polyfills

Node扩展结构

来源:ext/node/Cargo.toml19-107 ext/node/lib.rs

构建和开发基础设施

该项目使用复杂的构建和CI基础设施来管理多crate工作区的复杂性,并确保所有平台上的质量。

CI/CD管道配置

持续集成系统通过一个TypeScript生成器配置,该生成器生成GitHub Actions工作流

CI 流水线结构

开发工具配置

该项目包含广泛的工具配置,用于代码格式化、linting和开发工作流

工具配置目的
dprint.dprint.json代码格式化(Rust、TypeScript、JSON、Markdown)
CargoCargo.tomlRust工作区和依赖管理
GitHub Actions.github/workflows/CI/CD管道自动化

开发工具集成

来源:.github/workflows/ci.generate.ts1-1118 .dprint.json1-84 Cargo.toml389-524

该项目结构展示了一个组织良好、模块化的架构,通过工作区级配置和共享工具,实现了扩展的独立开发,同时保持了一致性。扩展系统在Web标准实现和核心运行时之间提供了清晰的分离,使代码库易于维护和扩展。