Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第一章:项目概述

本章介绍 VSDB 项目的整体定位、功能特性、技术选型和项目结构。

1.1 项目定位

VSDB 是一个为 Visual Studio Code 设计的全功能数据库客户端扩展。它的核心目标是:

graph TD
    A["VSDB 核心目标"] --> B["一体化数据库管理"]
    A --> C["开发效率提升"]
    A --> D["稳定性保障"]
    A --> E["安全性保证"]
    
    B --> B1["连接管理"]
    B --> B2["结构浏览"]
    B --> B3["数据编辑"]
    B --> B4["SQL执行"]
    
    C --> C1["自动扫描连接"]
    C --> C2["无需切换工具"]
    
    D --> D1["双进程架构"]
    D --> D2["自动恢复"]
    
    E --> E1["SecretStorage"]
    E --> E2["无明文存储"]

与竞品的定位差异

特性DataGripVSDBDBeaver
独立应用
VSCode 集成
自动扫描
轻量
功能完整度★★★★★★★★☆☆★★★★★
学习成本

VSDB 选择轻量集成路线,牺牲部分高级功能换取无缝的 VSCode 体验。

1.2 功能特性

连接管理

// 核心功能:连接 CRUD
interface ConnectionFeatures {
  add: '手动添加连接';
  scan: '自动扫描项目配置';
  edit: '编辑连接属性';
  delete: '删除连接';
  group: '连接分组';
  color: '颜色标记';
  scope: '项目级/全局';
}

支持的扫描来源:

来源文件解析内容
.env.env, .env.local, .env.developmentDATABASE_URL, DB_*, MYSQL_*, PG_*
docker-composedocker-compose.ymlMySQL/PostgreSQL 服务定义
TypeORMormconfig.json, data-source.ts连接配置对象
Laravelconfig/database.phpMySQL/PG 连接数组
Djangosettings.pyDATABASES 字典
Prismaschema.prisma数据库 URL

数据库浏览

graph TD
    A["连接节点"] --> B["数据库列表"]
    B --> C["表列表"]
    C --> D["列信息"]
    
    B --> E["视图列表"]
    B --> F["存储过程"]
    
    D --> G["类型"]
    D --> H["是否NULL"]
    D --> I["默认值"]
    D --> J["主键"]
    D --> K["自增"]
    
    C --> L["索引"]
    C --> M["约束"]
    C --> N["触发器"]

SQL 编辑器

  • Monaco 编辑器集成,语法高亮
  • SQL 关键字自动补全
  • Ctrl+Enter 快速执行
  • 多结果标签页
  • 执行状态指示

数据操作

graph LR
    subgraph "查询执行"
        Q1["普通查询"]
        Q2["流式查询<br/>(大数据集)"]
    end
    
    subgraph "结果处理"
        R1["分页显示"]
        R2["内联编辑"]
        R3["虚拟滚动"]
    end
    
    subgraph "导入导出"
        E1["CSV"]
        E2["JSON"]
        E3["SQL"]
    end
    
    Q1 --> R1
    Q2 --> R3
    R1 --> E1
    R1 --> E2
    R1 --> E3

辅助功能

  • 查询历史:记录执行的 SQL,支持固定防清理
  • 书签系统:收藏连接、表、查询,支持分组
  • 全局搜索:搜索表名、列名、数据内容

1.3 技术选型

语言与框架

语言: TypeScript
扩展框架: VSCode Extension API
前端框架: React + Vite
编辑器: Monaco Editor
数据库驱动: mysql2 / pg
构建工具: webpack (扩展) + Vite (Webview)
测试框架: Vitest

选型决策记录

决策点选择理由
双进程 vs 单进程双进程数据库操作隔离,崩溃不影响 VSCode
Worker 通信child_process IPC原生支持,无需额外依赖
前端框架ReactWebview 标准方案,生态丰富
编辑器MonacoVSCode 同款,语法支持完善
数据库驱动mysql2 / pg纯 JS 实现,支持 Promise
流式传输自定义 chunk避免大数据集阻塞 IPC

为什么选择 TypeScript

graph TD
    A["TypeScript"] --> B["类型安全"]
    A --> C["VSCode 原生"]
    A --> D["生态丰富"]
    
    B --> B1["IPC协议类型化"]
    B --> B2["配置验证"]
    
    C --> C1["调试支持"]
    C --> C2["开发体验"]
    
    D --> D1["数据库驱动"]
    D --> D2["UI 框架"]

1.4 项目结构

vsdb/
├── src/                    # 扩展源代码
│   ├── extension.ts        # 扩展入口,命令注册
│   ├── core/               # 核心管理模块
│   │   ├── connectionManager.ts  # 连接 CRUD
│   │   ├── ipcManager.ts        # Worker 通信
│   │   ├── storage.ts           # 配置存储
│   │   ├── scanner.ts           # 扫描协调器
│   │   ├── historyManager.ts    # 查询历史
│   │   ├── bookmarkManager.ts   # 书签管理
│   │   └── searchEngine.ts      # 全局搜索
│   ├── scanner/            # 配置解析器
│   │   ├── envParser.ts          # .env 解析
│   │   ├── dockerComposeParser.ts # docker-compose 解析
│   │   └eworkParser.ts           # 框架配置解析
│   ├── shared/             # 共享类型和常量
│   │   ├── types.ts              # 类型定义
│   │   ├── constants.ts          # 常量定义
│   ├── ui/                 # UI 层
│   │   ├── tree/                 # TreeView
│   │   │   ├── treeProvider.ts   # 树数据提供者
│   │   │   ├── treeItems.ts      # 树节点类型
│   │   │   └commands.ts          # 树命令
│   │   ├── webview/              # Webview Panel
│   │   │   ├── sqlEditor.ts      # SQL 编辑器
│   │   │   ├── dataGrid.ts       # 数据网格
│   │   │   ├── connectionForm.ts # 连接表单
│   │   │   ├── tableStructure.ts # 表结构面板
│   │   │   ├── importExport.ts   # 导入导出
│   ├── worker/             # Worker 进程
│   │   ├── worker.ts             # Worker 入口
│   │   ├── driver/               # 数据库驱动
│   │   │   ├── mysql.ts          # MySQL 驱动
│   │   │   ├── postgresql.ts     # PostgreSQL 驱动
│   │   │   ├── schema/           # Schema Inspector
│   │   │   ├── mysqlSchema.ts    # MySQL Schema
│   │   │   ├── pgSchema.ts       # PostgreSQL Schema
│   │   ├── queryQueue.ts         # 查询队列
├── webview-ui/             # Webview React 应用
│   ├── src/
│   │   ├── App.tsx              # 入口组件
│   │   ├── main.tsx             # React 入口
│   │   ├── components/
│   │   │   ├── SqlEditor.tsx    # SQL 编辑器组件
│   │   │   ├── DataGrid.tsx     # 数据网格组件
│   │   │   ├── GridToolbar.tsx  # 工具栏
│   │   │   ├── ResultPanel.tsx  # 结果面板
│   │   │   ├── ImportExport.tsx # 导入导出组件
│   ├── package.json
│   ├── vite.config.ts
├── __tests__/              # 测试目录
│   ├── core/
│   │   ├── ipcManager.test.ts
│   │   ├── connectionManager.test.ts
│   ├── scanner/
│   │   ├── envParser.test.ts
│   ├── fixtures/
│   │   ├── config/
│   │   │   ├── database.yml
│   │   │   ├── ormconfig.json
│   │   ├── docker-compose.yaml
├── dist/                   # 构建输出
├── resources/              # 资源文件 (图标等)
├── docs/                   # 设计文档
├── package.json            # 扩展配置
├── tsconfig.json           # TypeScript 配置
├── webpack.config.js       # webpack 配置
├── vite.config.ts          # Vite 配置
└── CLAUDE.md               # Claude Code 指导文件

1.5 关键文件说明

入口文件

文件作用
src/extension.ts扩展入口,注册命令、视图、初始化管理器
src/worker/worker.tsWorker 入口,处理 IPC 消息,路由到驱动

核心管理器

文件作用
src/core/connectionManager.ts连接 CRUD,项目级/全局存储协调
src/core/ipcManager.tsWorker 生命周期,请求/响应匹配,崩溃恢复
src/core/storage.tsJSON 文件存储 + SecretStorage
src/core/scanner.ts协调多个 Parser 执行扫描

类型定义

文件作用
src/shared/types.ts所有接口定义:DbConnection, WorkerRequest, QueryResult 等
src/shared/constants.ts常量:默认端口、命令 ID、视图 ID

1.6 构建与开发

构建命令

# 生产构建
npm run compile

# 开发监听
npm run watch

# 构建 Webview
npm run build:webview

# 运行测试
npm run test

# 测试监听
npm run test:watch

# Lint
npm run lint

# 打包扩展
vsce package

开发流程

graph TD
    A["克隆项目"] --> B["npm install"]
    B --> C["npm run compile"]
    C --> D["cd webview-ui && npm install"]
    D --> E["npm run build"]
    E --> F["F5 启动调试"]
    
    F --> G["修改代码"]
    G --> H{"Webview 变更?"}
    H -->|是| I["rebuild webview"]
    H -->|否| J["自动重编译"]
    I --> K["刷新 Webview"]
    J --> K
    K --> G

调试配置

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Run Extension",
      "type": "extensionHost",
      "request": "launch",
      "runtimeExecutable": "${execPath}",
      "args": ["--extensionDevelopmentPath=${workspaceFolder}"]
    }
  ]
}

1.7 小结

本章介绍了 VSDB 的:

  • 定位:VSCode 内的轻量数据库客户端
  • 功能:连接管理、结构浏览、SQL 编辑、数据操作
  • 技术选型:TypeScript + 双进程架构 + React Webview
  • 项目结构:核心模块、扫描引擎、Worker、UI 层

下一章将深入介绍核心概念和数据模型。