Terminal Manager 技术架构解析

# 背景

Terminal Manager 是一款现代化的终端管理桌面应用,基于 Electron、Vue 3 和 TypeScript 构建,提供多工作区管理、分屏、标签页、多终端支持、Git 集成、文件浏览和 SSH 连接等功能。

本文将深入解析其技术架构,图文并茂地带你了解这个项目的核心设计。

# 整体架构

Terminal Manager 采用经典的 Electron 三进程模型:主进程(Main Process)、预加载脚本(Preload)和渲染进程(Renderer)。

# 项目结构

terminal-manager-electron/
├── src/
│   ├── main/              # Electron 主进程
│   │   ├── index.ts       # 应用入口,生命周期的管理
│   │   ├── window.ts      # 窗口创建与状态持久化
│   │   ├── menu.ts        # 应用菜单配置
│   │   ├── store.ts       # electron-store 配置
│   │   ├── logger.ts      # 日志初始化
│   │   ├── git.ts         # Git 操作封装
│   │   ├── shellUtils.ts  # Shell 检测与缓存
│   │   ├── ipc/           # IPC 处理器模块
│   │   └── search/        # 文件搜索模块
│   ├── preload/           # 预加载脚本(安全桥接)
│   │   └── index.ts       # 暴露 electronAPI 给渲染进程
│   └── renderer/          # Vue 前端应用
│       ├── main.ts        # Vue 应用入口
│       ├── App.vue        # 根组件
│       ├── components/    # Vue 组件
│       ├── stores/        # Pinia 状态管理
│       ├── composables/   # Vue 组合式函数
│       └── utils/         # 工具函数
├── packages/              # Monorepo 工作区
│   ├── api/               # API 封装层
│   ├── browser/           # 浏览器/书签面板组件
│   ├── components/        # 共享 UI 组件
│   ├── composables/       # 共享组合式函数
│   ├── i18n/              # 国际化
│   ├── logger/            # 日志包
│   ├── shared/            # 共享类型、常量、平台检测
│   └── storage/           # 数据持久化工具
├── electron.vite.config.ts
├── electron-builder.yml
└── package.json

# IPC 通信设计

IPC(Inter-Process Communication)是 Electron 架构的核心,负责主进程与渲染进程之间的数据交换。

# 主要 IPC 处理器

模块 职责
pty.ts 本地 PTY 进程管理(创建、输入、调整大小、关闭)
sshPty.ts SSH PTY 连接(基于 ssh2 库)
fs.ts 文件系统操作(读取目录、搜索文件、文件监听)
git.ts Git 操作(状态、日志、分支、工作区、标签)
shell.ts Shell 操作(在资源管理器中打开、编辑器、外部程序)
store.ts 持久化键值存储
window.ts 窗口控制(最小化、最大化、全屏、缩放)
system.ts 系统信息(字体、IP、端口、进程管理)
dialog.ts 原生对话框(打开目录、错误提示)

# 终端模拟架构

# 本地终端

本地终端使用 node-pty 库创建伪终端进程:

  • 支持 UTF-8 环境变量以处理国际字符
  • macOS/Linux 上使用登录 Shell(-l)以获取完整 PATH
  • PTY 可调整大小以适应终端窗口变化

# SSH 终端

SSH 连接使用 ssh2 库:

  • 支持 PTY 调整大小
  • 支持密码和密钥认证

# 状态管理

使用 Pinia 进行状态管理,主要 stores:

# Workspace Store

管理多个工作区,每个工作区包含多个终端或 SSH 连接。支持会话持久化,启动时自动恢复工作区配置。

# Terminal Store

核心终端状态管理:

  • 创建和管理 PTY 实例
  • xterm.js 终端渲染
  • SSH 连接状态
  • 终端数据流处理

# 数据流

# Monorepo 包结构

用途
shared 共享类型定义、常量、平台检测、菜单快捷键、ElectronAPI 接口
api API 封装层,提供 getAPI() 获取 API 实例,支持 Mock
components 可复用 UI 组件(BaseButton、BaseDialog、DropdownMenu 等)
i18n 国际化支持,提供 t() 函数
storage 数据持久化封装(loadDatasaveData
logger 结构化日志封装
browser 浏览器/书签面板组件

# 关键技术选型

  • 构建工具: electron-vite(专为 Electron 设计的构建工具)
  • 前端框架: Vue 3 + TypeScript + Pinia
  • 终端模拟: xterm.js + node-pty(本地)+ ssh2(远程)
  • Git 操作: simple-git
  • 持久化: electron-store
  • 日志: electron-log
  • 打包: electron-builder

# 总结

Terminal Manager 采用了清晰的分层架构设计:

  1. 主进程负责底层系统交互(PTY、SSH、文件系统、Git)
  2. 预加载脚本作为安全桥接,只暴露必要的 API
  3. 渲染进程采用 Vue 3 + Pinia 实现 UI 和状态管理
  4. Monorepo 结构便于包管理和代码共享

这种架构既保证了安全性(Context Isolation),又提供了强大的终端能力(原生模块支持),同时保持了前端开发体验。