菜单

开发指南

相关源文件

本文档为希望为 Tabby 贡献代码、了解其架构、设置开发环境或创建插件的开发人员提供了技术信息。有关最终用户如何使用 Tabby 的信息,请参阅概述

目的与范围

本指南适用于希望以下列目的的开发人员:

  • 理解 Tabby 的代码库和架构
  • 设置开发环境
  • 开发插件以扩展 Tabby 的功能
  • 为 Tabby 项目贡献代码

有关 Tabby 的安装和使用信息,请参阅入门。有关构建和部署的详细信息,请参阅构建与部署

架构概述

Tabby 基于 Angular 和 Electron 构建,采用插件化架构,支持模块化开发。应用程序围绕几个核心系统构建,这些系统通过 Angular 的依赖注入系统进行通信。

核心架构

下图展示了 Tabby 的主要组件及其关系

来源

  • package.json
  • app/package.json

插件系统

Tabby 采用插件化架构,通过模块化插件提供功能

来源

  • package.json
  • README.md

设置开发环境

先决条件

  • Node.js(v16 或更高版本)
  • Yarn 包管理器
  • Git

安装与设置

  1. 克隆仓库
  1. 安装依赖项
  1. 构建应用程序
  1. 启动带热重载的开发版本
  1. 在单独的终端中启动应用程序

开发工作流程利用了 package.json 中定义的 npm 脚本

脚本描述
build构建所有模块
build:typings构建 TypeScript 类型定义
watch构建并监视更改
start在开发模式下启动应用程序
lint运行 ESLint 检查代码风格

来源

  • package.json (脚本部分)
  • app/package.json (脚本部分)

项目结构

代码库组织成多个包,每个包处理功能的一个特定方面

目的
tabby-core核心应用程序基础设施和服务
tabby-settings设置 UI 和配置管理
tabby-terminal终端仿真和接口
tabby-local本地终端实现
tabby-sshSSH 客户端实现
tabby-serial串口终端实现
tabby-telnetTelnet 客户端实现
tabby-electronElectron 特定平台代码
tabby-webWeb 平台实现

每个包遵循类似的结构

tabby-*/
├── src/
│   ├── index.ts         # Main entry point and module definition
│   ├── api.ts           # Public API definitions
│   ├── components/      # Angular components
│   ├── services/        # Angular services
│   └── config.ts        # Configuration schema
├── package.json         # Package metadata
└── webpack.config.js    # Build configuration

来源

  • app/package.json
  • package.json

插件开发

插件扩展了 Tabby 的功能。本节说明如何开发自定义插件。

插件结构

一个基本插件需要以下结构

tabby-myplugin/
├── src/
│   ├── index.ts                    # Main entry point with NgModule definition
│   ├── components/                 # Angular components
│   │   └── my-component.component.ts
│   └── services/                   # Angular services
│       └── my-service.service.ts
├── package.json                    # Plugin metadata
└── webpack.config.js               # Build configuration

创建插件

  1. 为您的插件创建 package.json 文件
  1. 在 src/index.ts 中创建主模块定义

插件扩展点

Tabby 提供了几个插件可以实现的扩展点

扩展点接口目的
SettingsTabProvidertabby-settings向设置窗口添加选项卡
TerminalDecoratortabby-terminal修改终端行为
ToolbarButtonProvidertabby-core向工具栏添加按钮
TabRecoveryProvidertabby-core支持标签页恢复
ProfileProvidertabby-core添加连接配置文件类型
ConfigProvidertabby-core提供额外配置
HotkeyProvidertabby-core添加热键定义

来源

  • README.md (插件示例)
  • README.zh-CN.md (插件列表)

示例插件

以下插件可作为示例进行研究

  1. docker - 连接到 Docker 容器
  2. title-control - 控制终端标签页标题
  3. save-output - 将终端输出记录到文件
  4. clippy - 简单示例插件

来源

  • README.md (插件部分)

构建与测试

开发构建

测试您的插件

  1. 构建您的插件
  2. 将您的插件添加到本地 Tabby 配置中
  3. 重启 Tabby

来源

  • package.json (脚本)

贡献指南

拉取请求流程

  1. 在 GitHub 上 Fork 仓库
  2. 创建功能分支
  3. 进行您的更改
  4. 运行 yarn lint 以确保代码质量
  5. 提交拉取请求

代码风格

  • 遵循现有的 TypeScript 和 Angular 模式
  • 使用 Angular 的依赖注入系统
  • 发布时遵循语义化版本控制
  • 文档化公共 API

来源

  • README.md (贡献部分)
  • .all-contributorsrc

调试技巧

  1. 使用 Chrome DevTools 调试渲染器进程

    • 在开发模式下,按 F12 打开 DevTools
    • 使用“Sources”选项卡设置断点
  2. 用于主进程调试

    • 使用 yarn start:prod --debug 启动 Tabby
    • 在 chrome://inspect 连接 Chrome
  3. 有用的环境变量

    • TABBY_DEV=1 - 启用开发模式
    • TABBY_PLUGINS=/path/to/plugins - 从指定目录加载插件

来源

  • package.json (脚本)
  • app/package.json (脚本)

其他资源

来源

  • README.md
  • package.json