菜单

CLI 架构

相关源文件

本文档介绍了 Deno 的命令行接口 (CLI) 架构,包括参数解析、命令分派、服务创建和工作进程初始化。有关运行时架构和 JavaScript 执行环境的信息,请参阅 运行时架构。有关特定工具和子命令的详细信息,请参阅 开发者工具

概述

Deno CLI 采用分层架构,主入口点处理命令行参数,分派到适当的子命令处理程序,并创建工作进程来执行 JavaScript 代码。该架构使用工厂模式进行服务创建和依赖注入,确保昂贵的资源仅在需要时进行初始化。

命令行处理流程

命令行处理流程

CLI 处理从 `main()` 开始,经过参数解析,然后执行子命令。每个子命令都在单独的任务中启动,以防止堆栈溢出问题。

来源:cli/main.rs453-513 cli/main.rs515-555 cli/args/flags.rs647-690 cli/args/flags.rs468-502

参数解析架构

CLI 使用 `clap` 库来结构化地处理参数,将标志和子命令组织到类型化的结构中。

参数解析结构

参数解析系统使用强类型结构来表示不同的命令配置,确保整个 CLI 的类型安全。

来源:cli/args/flags.rs647-690 cli/args/flags.rs468-502 cli/args/flags.rs692-733

子命令分派系统

CLI 通过一个集中的路由系统分派不同的子命令,该系统将命令类型映射到其各自的处理程序。

子命令分派架构

每个子命令由 `tools` 命名空间中的专用模块处理,并对语言服务器协议 (LSP) 功能进行特殊处理。

来源:cli/main.rs111-368 cli/main.rs102-109

工厂模式与服务创建

CLI 在 `CliFactory` 中使用工厂模式实现,以管理整个应用程序的服务创建和依赖注入。

工厂模式架构

工厂使用延迟初始化来避免在真正需要之前创建昂贵的资源,从而提高 CLI 的启动性能。

来源:cli/factory.rs256-300 cli/factory.rs302-783

工作进程创建与初始化

CLI 创建不同类型的工作进程来执行 JavaScript 代码,主工作进程是主要的执行环境。

工作进程创建架构

工作进程创建系统为不同的执行上下文提供了不同的工作进程类型,共享的服务依赖通过工厂模式进行管理。

来源:cli/worker.rs314-442 runtime/worker.rs174-219 runtime/worker.rs359-377

配置和选项解析

CLI 从多种来源处理配置,包括命令行标志、配置文件和环境变量。

配置源优先级处理方式
命令行标志最高flags_from_vec()
环境变量中等load_env_variables_from_env_file()
配置文件 (deno.json)最低CliOptions::from_flags()

`CliOptions` 结构体作为中央配置对象,整合所有配置来源,并在应用程序中提供对设置的类型化访问。

来源:cli/args/mod.rs369-411 cli/args/flags.rs533-555

错误处理和 panic 管理

CLI 通过自定义 panic 钩子和优雅的错误报告实现了全面的错误处理。

错误处理流程

CLI 设置了自定义 panic 钩子,以提供更好的错误消息,并包含调试信息,帮助用户有效地报告问题。

来源:cli/main.rs371-423 cli/main.rs434-443 cli/main.rs425-432