swagger_generator_flutter/USAGE_AS_DEV_DEPENDENCY.md

353 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 作为 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.