353 lines
8.0 KiB
Markdown
353 lines
8.0 KiB
Markdown
# 作为 dev_dependencies 使用指南
|
||
|
||
本工具可以作为 `dev_dependencies` 集成到您的 Flutter/Dart 项目中,实现自动化的 Swagger API 代码生成。
|
||
|
||
## 📦 安装步骤
|
||
|
||
### 1. 添加依赖
|
||
|
||
在您的项目的 `pubspec.yaml` 中添加:
|
||
|
||
```yaml
|
||
dev_dependencies:
|
||
swagger_generator_flutter:
|
||
git:
|
||
url: https://github.com/your-org/swagger_generator_flutter.git
|
||
ref: develop # 或者指定特定的 tag/branch
|
||
|
||
# 或者使用本地路径(开发时)
|
||
# swagger_generator_flutter:
|
||
# path: ../swagger_generator_flutter
|
||
```
|
||
|
||
### 2. 安装依赖包
|
||
|
||
```bash
|
||
flutter pub get
|
||
# 或
|
||
dart pub get
|
||
```
|
||
|
||
## 📝 配置文件
|
||
|
||
在您的项目根目录创建 `generator_config.yaml` 配置文件:
|
||
|
||
```yaml
|
||
# Swagger 代码生成器配置文件
|
||
|
||
# 基本配置
|
||
generator:
|
||
name: "my_project_generator"
|
||
version: "1.0"
|
||
author: "Your Name"
|
||
copyright: "Copyright (C) 2025 Your Company. All rights reserved."
|
||
|
||
# 输入配置
|
||
input:
|
||
# Swagger 文档源(支持多版本)
|
||
swagger_urls:
|
||
# 简写形式:直接列出 URL
|
||
- "https://your-api.com/swagger/v1/swagger.json"
|
||
- "https://your-api.com/swagger/v2/swagger.json"
|
||
|
||
# 完整形式:可以控制每个版本的启用状态
|
||
# - url: "https://your-api.com/swagger/v1/swagger.json"
|
||
# enabled: true # 可选,是否启用此版本(默认: true)
|
||
|
||
# 验证配置
|
||
validate_schema: true
|
||
strict_mode: true
|
||
|
||
# 输出配置
|
||
output:
|
||
# 输出目录
|
||
base_dir: "./lib/generated"
|
||
api_dir: "./lib/generated/api"
|
||
models_dir: "./lib/generated/api_models"
|
||
|
||
# 文件命名
|
||
api_file_suffix: "_api.dart"
|
||
model_file_suffix: ".dart"
|
||
|
||
# 是否按 tag 分组
|
||
split_by_tags: true
|
||
|
||
# 代码生成配置
|
||
generation:
|
||
# API 接口配置
|
||
api:
|
||
enabled: true
|
||
use_retrofit: true
|
||
use_dio: true
|
||
parser: "JsonSerializable"
|
||
|
||
# 基础类型配置(根据您的项目调整)
|
||
base_result_type: "BaseResult"
|
||
base_page_result_type: "BasePageResult"
|
||
base_result_import: "package:your_project/common/models/base_result.dart"
|
||
base_page_result_import: "package:your_project/common/models/base_page_result.dart"
|
||
|
||
# 方法命名
|
||
method_naming: "camelCase"
|
||
|
||
# 数据模型配置
|
||
models:
|
||
enabled: true
|
||
use_json_serializable: true
|
||
|
||
# JsonSerializable 配置
|
||
json_serializable:
|
||
checked: true
|
||
include_if_null: false
|
||
explicit_to_json: true
|
||
|
||
# 类命名
|
||
class_naming: "PascalCase"
|
||
field_naming: "camelCase"
|
||
|
||
# 构造函数配置
|
||
use_const_constructor: true
|
||
required_for_non_nullable: true
|
||
```
|
||
|
||
## 🚀 使用方法
|
||
|
||
### 方式 1: 使用命令行直接执行
|
||
|
||
```bash
|
||
# 生成所有文件(API、模型、文档)
|
||
dart run swagger_generator_flutter generate --all
|
||
|
||
# 只生成模型
|
||
dart run swagger_generator_flutter generate --models
|
||
|
||
# 只生成 API 接口
|
||
dart run swagger_generator_flutter generate --api
|
||
|
||
# 只生成文档
|
||
dart run swagger_generator_flutter generate --docs
|
||
|
||
# 指定输出目录
|
||
dart run swagger_generator_flutter generate --all --output-dir lib/generated
|
||
```
|
||
|
||
### 方式 2: 创建便捷脚本
|
||
|
||
在项目根目录创建 `generate_api.sh` (macOS/Linux):
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
echo "🚀 开始生成 API 代码..."
|
||
dart run swagger_generator_flutter generate --all
|
||
echo "✅ 代码生成完成!"
|
||
```
|
||
|
||
或创建 `generate_api.bat` (Windows):
|
||
|
||
```batch
|
||
@echo off
|
||
echo 🚀 开始生成 API 代码...
|
||
dart run swagger_generator_flutter generate --all
|
||
echo ✅ 代码生成完成!
|
||
```
|
||
|
||
给脚本添加执行权限并运行:
|
||
|
||
```bash
|
||
# macOS/Linux
|
||
chmod +x generate_api.sh
|
||
./generate_api.sh
|
||
|
||
# Windows
|
||
generate_api.bat
|
||
```
|
||
|
||
### 方式 3: 集成到构建流程
|
||
|
||
在 `pubspec.yaml` 中添加自定义脚本:
|
||
|
||
```yaml
|
||
# 可以在 scripts 字段添加(如果使用 melos 或其他工具)
|
||
scripts:
|
||
generate: dart run swagger_generator_flutter generate --all
|
||
```
|
||
|
||
## 📋 命令选项
|
||
|
||
| 选项 | 简写 | 说明 |
|
||
|------|------|------|
|
||
| `--all` | `-a` | 生成所有文件(默认) |
|
||
| `--api` | `-r` | 生成 Retrofit 风格 API 接口 |
|
||
| `--models` | `-m` | 生成数据模型 |
|
||
| `--docs` | `-d` | 生成 API 文档 |
|
||
| `--simple` | `-s` | 使用简洁版模型生成 |
|
||
| `--split-by-tags` | `-t` | 按 tags 分组生成多个 API 文件 |
|
||
| `--output-dir` | `-o` | 指定输出目录 |
|
||
| `--help` | `-h` | 显示帮助信息 |
|
||
|
||
## 📂 生成的文件结构
|
||
|
||
执行生成命令后,将在输出目录创建以下结构:
|
||
|
||
```
|
||
lib/generated/
|
||
├── api/
|
||
│ ├── v1/
|
||
│ │ ├── user_api.dart
|
||
│ │ ├── product_api.dart
|
||
│ │ └── index.dart
|
||
│ ├── v2/
|
||
│ │ ├── user_api_v2.dart
|
||
│ │ └── index.dart
|
||
│ └── api_client.dart
|
||
├── api_models/
|
||
│ ├── request/
|
||
│ │ ├── create_user_request.dart
|
||
│ │ └── index.dart
|
||
│ ├── result/
|
||
│ │ ├── user_result.dart
|
||
│ │ └── index.dart
|
||
│ ├── parameters/
|
||
│ │ ├── get_user_list_parameters.dart
|
||
│ │ └── index.dart
|
||
│ └── index.dart
|
||
├── api_documentation.md
|
||
└── SUMMARY.md
|
||
```
|
||
|
||
## 🔧 必需的项目依赖
|
||
|
||
确保您的项目 `pubspec.yaml` 包含以下依赖:
|
||
|
||
```yaml
|
||
dependencies:
|
||
# HTTP 客户端
|
||
dio: ^5.0.0
|
||
retrofit: ^4.0.0
|
||
|
||
# JSON 序列化
|
||
json_annotation: ^4.8.0
|
||
|
||
dev_dependencies:
|
||
# 代码生成
|
||
build_runner: ^2.4.7
|
||
retrofit_generator: ^8.0.0
|
||
json_serializable: ^6.7.1
|
||
```
|
||
|
||
## 🔄 运行 build_runner
|
||
|
||
生成代码后,需要运行 `build_runner` 生成 `.g.dart` 文件:
|
||
|
||
```bash
|
||
# 一次性构建
|
||
dart run build_runner build --delete-conflicting-outputs
|
||
|
||
# 监听模式(开发时推荐)
|
||
dart run build_runner watch --delete-conflicting-outputs
|
||
```
|
||
|
||
## 💡 工作流程示例
|
||
|
||
完整的代码生成工作流程:
|
||
|
||
```bash
|
||
# 1. 生成 API 代码
|
||
dart run swagger_generator_flutter generate --all
|
||
|
||
# 2. 运行 build_runner 生成序列化代码
|
||
dart run build_runner build --delete-conflicting-outputs
|
||
|
||
# 3. 格式化代码(可选)
|
||
dart format lib/generated
|
||
|
||
# 4. 分析代码(可选)
|
||
dart analyze lib/generated
|
||
```
|
||
|
||
## 🎯 CI/CD 集成
|
||
|
||
在您的 CI/CD 流程中添加代码生成步骤:
|
||
|
||
### GitHub Actions 示例
|
||
|
||
```yaml
|
||
name: Generate API Code
|
||
|
||
on:
|
||
push:
|
||
branches: [ main, develop ]
|
||
pull_request:
|
||
branches: [ main, develop ]
|
||
|
||
jobs:
|
||
generate:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- uses: subosito/flutter-action@v2
|
||
with:
|
||
flutter-version: '3.16.0'
|
||
channel: 'stable'
|
||
|
||
- name: Install dependencies
|
||
run: flutter pub get
|
||
|
||
- name: Generate API code
|
||
run: dart run swagger_generator_flutter generate --all
|
||
|
||
- name: Run build_runner
|
||
run: dart run build_runner build --delete-conflicting-outputs
|
||
|
||
- name: Check for changes
|
||
run: |
|
||
git diff --exit-code || (echo "Generated code has changes" && exit 1)
|
||
```
|
||
|
||
## 🐛 常见问题
|
||
|
||
### 1. 找不到命令
|
||
|
||
**问题**: `Error: Could not find package swagger_generator_flutter`
|
||
|
||
**解决**: 确保已运行 `flutter pub get` 安装依赖
|
||
|
||
### 2. 配置文件未找到
|
||
|
||
**问题**: 工具无法读取 `generator_config.yaml`
|
||
|
||
**解决**: 确保配置文件在项目根目录,与 `pubspec.yaml` 同级
|
||
|
||
### 3. 生成的代码有编译错误
|
||
|
||
**问题**: 生成的代码缺少导入或有类型错误
|
||
|
||
**解决**:
|
||
- 检查 `generator_config.yaml` 中的导入配置
|
||
- 确保项目中已定义 `BaseResult` 等基础类型
|
||
- 运行 `dart run build_runner build --delete-conflicting-outputs`
|
||
|
||
### 4. 权限问题
|
||
|
||
**问题**: 无法写入生成的文件
|
||
|
||
**解决**:
|
||
- 检查输出目录权限
|
||
- 确保输出目录存在或工具有创建权限
|
||
|
||
## 📚 更多资源
|
||
|
||
- [完整文档](docs/USAGE_GUIDE.md)
|
||
- [项目概览](docs/PROJECT_OVERVIEW.md)
|
||
- [示例项目](example/)
|
||
|
||
## 🤝 贡献
|
||
|
||
如果您发现问题或有改进建议,欢迎提交 Issue 或 Pull Request。
|
||
|
||
## 📄 许可证
|
||
|
||
Copyright (C) 2025 YuanXuan. All rights reserved.
|
||
|