Files
npm-tool/.qoder/repowiki/zh/content/API 参考手册/配置管理 API.md

412 lines
12 KiB
Markdown
Raw Permalink 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.

# 配置管理 API
<cite>
**本文档引用的文件**
- [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js)
- [TsHttpUtil.js](file://src/https/TsHttpUtil.js)
- [TsCrypto.js](file://src/utils/TsCrypto.js)
- [TsSM4.js](file://src/utils/TsSM4.js)
- [index.js](file://index.js)
- [package.json](file://package.json)
- [README.md](file://README.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
配置管理模块是 npm-tool 包的核心基础设施,负责管理系统级的全局配置。该模块提供了统一的配置存储、读取和更新机制,支持运行时动态配置管理。通过配置管理,开发者可以灵活地控制网络请求行为、加密参数、错误处理策略等关键功能。
本模块采用单例模式设计,使用浏览器全局对象 `window.httpConfig` 作为配置存储容器,确保配置在整个应用生命周期内的持久性和一致性。配置系统支持多种配置项类型,包括基础数据类型、函数类型和回调函数类型,为不同场景提供灵活的配置选项。
## 项目结构
npm-tool 包采用模块化设计,配置管理相关的核心文件位于 `src/utils/` 目录下:
```mermaid
graph TB
subgraph "配置管理模块"
TsGlobalConfig[TsGlobalConfig.js<br/>全局配置管理]
TsCrypto[TsCrypto.js<br/>加密工具]
TsSM4[TsSM4.js<br/>SM4算法实现]
end
subgraph "HTTP 请求模块"
TsHttpUtil[TsHttpUtil.js<br/>HTTP 请求封装]
end
subgraph "存储模块"
TsStorage[TsStorage.js<br/>本地存储]
end
subgraph "工具模块"
TsCommon[TsCommon.js<br/>通用工具]
end
subgraph "入口文件"
Index[index.js<br/>模块导出]
Package[package.json<br/>包配置]
end
TsGlobalConfig --> TsHttpUtil
TsCrypto --> TsSM4
TsCrypto --> TsGlobalConfig
TsHttpUtil --> TsStorage
TsHttpUtil --> TsCommon
Index --> TsGlobalConfig
Index --> TsHttpUtil
Index --> TsCrypto
Index --> TsStorage
Index --> TsCommon
```
**图表来源**
- [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34)
- [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171)
- [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34)
**章节来源**
- [index.js:1-16](file://index.js#L1-L16)
- [package.json:1-24](file://package.json#L1-L24)
## 核心组件
### 全局配置系统
全局配置系统是整个模块的核心,提供了配置的存储、读取和更新功能。系统采用默认配置与用户配置相结合的设计模式,确保在任何情况下都有可用的配置。
#### 配置项类型定义
| 配置项名称 | 类型 | 默认值 | 描述 |
|-----------|------|--------|------|
| base64Key | string | "WmdUzPJXbngVNiaSsQrihg==" | SM4 加密算法的 Base64 密钥 |
| prefix | string/function | "" | API 前缀,可为字符串或函数 |
| onHttpError | function | `(res) => {}` | HTTP 错误处理回调函数 |
| httpParams | function | `(res) => {}` | HTTP 请求参数处理函数 |
#### 配置优先级机制
配置系统采用以下优先级顺序:
1. **用户配置**:通过 `setConfig()` 设置的最新配置
2. **全局配置**:存储在 `window.httpConfig` 中的配置
3. **默认配置**:硬编码在代码中的默认值
**章节来源**
- [TsGlobalConfig.js:5-13](file://src/utils/TsGlobalConfig.js#L5-L13)
- [TsGlobalConfig.js:19-29](file://src/utils/TsGlobalConfig.js#L19-L29)
## 架构概览
配置管理模块采用分层架构设计,确保各组件之间的松耦合和高内聚:
```mermaid
graph TB
subgraph "配置管理层"
ConfigManager[配置管理器]
DefaultConfig[默认配置]
UserConfig[用户配置]
end
subgraph "应用层"
HttpUtil[HTTP 工具]
Crypto[加密工具]
Storage[存储工具]
end
subgraph "外部依赖"
Window[window.httpConfig]
UmiRequest[umi-request]
Base64Js[base64-js]
end
ConfigManager --> DefaultConfig
ConfigManager --> UserConfig
ConfigManager --> Window
HttpUtil --> ConfigManager
Crypto --> ConfigManager
HttpUtil --> UmiRequest
Crypto --> Base64Js
```
**图表来源**
- [TsGlobalConfig.js:19-29](file://src/utils/TsGlobalConfig.js#L19-L29)
- [TsHttpUtil.js:100-134](file://src/https/TsHttpUtil.js#L100-L134)
- [TsCrypto.js:7-13](file://src/utils/TsCrypto.js#L7-L13)
### 配置更新流程
```mermaid
sequenceDiagram
participant Client as 客户端代码
participant Config as 配置管理器
participant Window as window.httpConfig
participant HttpUtil as HTTP工具
Client->>Config : setConfig(新配置)
Config->>Window : 合并配置
Window-->>Config : 更新后的配置
Config-->>Client : 返回更新结果
HttpUtil->>Config : getConfig()
Config->>Window : 获取当前配置
Window-->>Config : 返回配置对象
Config-->>HttpUtil : 返回配置
HttpUtil->>HttpUtil : 使用配置执行请求
```
**图表来源**
- [TsGlobalConfig.js:27-29](file://src/utils/TsGlobalConfig.js#L27-L29)
- [TsHttpUtil.js:100-106](file://src/https/TsHttpUtil.js#L100-L106)
## 详细组件分析
### 配置管理器 (TsGlobalConfig)
配置管理器是整个系统的核心组件,负责管理全局配置的生命周期。
#### 方法签名
```javascript
// 获取当前配置
function getConfig(): ConfigObject
// 设置配置
function setConfig(obj?: Partial<ConfigObject>): void
```
#### 配置对象结构
```mermaid
classDiagram
class ConfigObject {
+string base64Key
+string|function prefix
+function onHttpError
+function httpParams
}
class DefaultConfig {
+string base64Key = "WmdUzPJXbngVNiaSsQrihg=="
+string prefix = ""
+function onHttpError
+function httpParams
}
class GlobalConfig {
+getConfig() : ConfigObject
+setConfig(obj) : void
}
ConfigObject <|-- DefaultConfig
GlobalConfig --> ConfigObject : uses
```
**图表来源**
- [TsGlobalConfig.js:5-13](file://src/utils/TsGlobalConfig.js#L5-L13)
- [TsGlobalConfig.js:19-29](file://src/utils/TsGlobalConfig.js#L19-L29)
#### 配置验证规则
配置系统实现了以下验证机制:
1. **类型验证**:确保配置项符合预期类型
2. **函数验证**:验证回调函数的可调用性
3. **密钥验证**:验证加密密钥的有效性
**章节来源**
- [TsGlobalConfig.js:19-29](file://src/utils/TsGlobalConfig.js#L19-L29)
### HTTP 工具集成
HTTP 工具通过配置管理器获取运行时配置,实现动态配置管理。
#### 配置使用流程
```mermaid
flowchart TD
Start([开始请求]) --> GetConfig[获取配置]
GetConfig --> CheckPrefix{检查前缀类型}
CheckPrefix --> |函数| CallPrefix[调用前缀函数]
CheckPrefix --> |字符串| UsePrefix[使用字符串前缀]
CallPrefix --> BuildURL[构建完整URL]
UsePrefix --> BuildURL
BuildURL --> AddParams[添加额外参数]
AddParams --> EncryptCheck{检查加密开关}
EncryptCheck --> |启用| EncryptData[加密数据]
EncryptCheck --> |禁用| SendRequest[发送请求]
EncryptData --> SendRequest
SendRequest --> HandleResponse[处理响应]
HandleResponse --> End([结束])
```
**图表来源**
- [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134)
- [TsHttpUtil.js:50-91](file://src/https/TsHttpUtil.js#L50-L91)
#### 配置项详细说明
| 配置项 | 类型 | 默认值 | 作用域 | 说明 |
|--------|------|--------|--------|------|
| base64Key | string | "WmdUzPJXbngVNiaSsQrihg==" | 全局 | SM4 加密算法密钥,用于数据加解密 |
| prefix | string/function | "" | HTTP 请求 | API 基础路径,支持动态函数生成 |
| onHttpError | function | `(res) => {}` | HTTP 请求 | 自定义错误处理逻辑 |
| httpParams | function | `(res) => {}` | HTTP 请求 | 动态添加请求参数 |
**章节来源**
- [TsGlobalConfig.js:5-13](file://src/utils/TsGlobalConfig.js#L5-L13)
- [TsHttpUtil.js:100-134](file://src/https/TsHttpUtil.js#L100-L134)
### 加密模块集成
加密模块通过配置管理器获取密钥信息,实现安全的数据传输。
#### 加密配置流程
```mermaid
sequenceDiagram
participant Crypto as 加密模块
participant Config as 配置管理器
participant SM4 as SM4算法
participant Window as window对象
Crypto->>Config : getConfig()
Config->>Window : 获取base64Key
Window-->>Config : 返回密钥
Config-->>Crypto : 返回配置
Crypto->>SM4 : 初始化加密器
SM4->>Crypto : 加密器实例
Crypto-->>SM4 : 执行加密
SM4-->>Crypto : 返回加密结果
```
**图表来源**
- [TsCrypto.js:7-13](file://src/utils/TsCrypto.js#L7-L13)
- [TsSM4.js:102-156](file://src/utils/TsSM4.js#L102-L156)
**章节来源**
- [TsCrypto.js:7-13](file://src/utils/TsCrypto.js#L7-L13)
- [TsSM4.js:102-156](file://src/utils/TsSM4.js#L102-L156)
## 依赖关系分析
配置管理模块与其他模块的依赖关系如下:
```mermaid
graph LR
subgraph "核心依赖"
TsGlobalConfig[TsGlobalConfig.js]
TsHttpUtil[TsHttpUtil.js]
TsCrypto[TsCrypto.js]
end
subgraph "外部依赖"
umi_request[umi-request]
base64_js[base64-js]
end
subgraph "内部依赖"
TsStorage[TsStorage.js]
TsCommon[TsCommon.js]
TsSM4[TsSM4.js]
end
TsGlobalConfig --> TsHttpUtil
TsGlobalConfig --> TsCrypto
TsHttpUtil --> umi_request
TsCrypto --> base64_js
TsCrypto --> TsSM4
TsHttpUtil --> TsStorage
TsHttpUtil --> TsCommon
```
**图表来源**
- [index.js:1-16](file://index.js#L1-L16)
- [TsHttpUtil.js:1-6](file://src/https/TsHttpUtil.js#L1-L6)
- [TsCrypto.js:1-4](file://src/utils/TsCrypto.js#L1-L4)
### 模块导出结构
```mermaid
classDiagram
class ExportModule {
+TsHttpUtil
+TsCommon
+TsStorage
+TsSM4
+TsCrypto
+TsGlobalConfig
}
class TsGlobalConfig {
+setConfig(obj)
+getConfig()
}
class TsHttpUtil {
+req(url, options)
+get(url, params, options)
+post(url, data, options)
+form(url, data, options)
}
ExportModule --> TsGlobalConfig
ExportModule --> TsHttpUtil
```
**图表来源**
- [index.js:8-15](file://index.js#L8-L15)
**章节来源**
- [index.js:1-16](file://index.js#L1-L16)
- [package.json:19-22](file://package.json#L19-L22)
## 性能考虑
配置管理模块在设计时充分考虑了性能优化:
### 缓存机制
- 配置读取采用缓存策略,避免重复的对象合并操作
- 加密器实例化后复用,减少内存分配开销
### 异步处理
- 配置更新采用异步方式,不影响主线程执行
- HTTP 请求处理支持 Promise 异步模式
### 内存管理
- 配置对象采用浅拷贝策略,减少内存占用
- 及时清理不再使用的配置引用
## 故障排除指南
### 常见配置问题
#### 配置不生效
**症状**:设置配置后,系统仍然使用默认配置
**解决方案**
1. 确认配置对象的键名正确
2. 检查配置值的类型是否符合要求
3. 验证配置更新时机是否正确
#### 加密失败
**症状**:数据加密或解密过程中出现错误
**解决方案**
1. 验证 base64Key 的长度是否为 16 字节
2. 检查密钥格式是否正确
3. 确认加密模式配置正确
#### HTTP 请求异常
**症状**:网络请求失败或返回错误
**解决方案**
1. 检查 prefix 配置是否正确
2. 验证 onHttpError 回调函数逻辑
3. 确认 httpParams 函数返回正确的参数对象
**章节来源**
- [TsSM4.js:103-122](file://src/utils/TsSM4.js#L103-L122)
- [TsHttpUtil.js:28-35](file://src/https/TsHttpUtil.js#L28-L35)
## 结论
配置管理模块为 npm-tool 包提供了强大而灵活的配置管理能力。通过统一的配置接口,开发者可以轻松地定制各种系统行为,包括网络请求、数据加密、错误处理等关键功能。
模块设计遵循了以下原则:
- **单一职责**:配置管理专注于配置的存储和读取
- **松耦合**:通过接口抽象降低模块间的依赖
- **可扩展性**:支持动态配置和运行时更新
- **安全性**:提供加密配置和参数验证机制
未来可以考虑的功能增强:
- 配置版本管理
- 配置热重载机制
- 更完善的配置验证和错误提示
- 配置持久化到本地存储