# 配置管理 API
**本文档引用的文件**
- [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)
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
配置管理模块是 npm-tool 包的核心基础设施,负责管理系统级的全局配置。该模块提供了统一的配置存储、读取和更新机制,支持运行时动态配置管理。通过配置管理,开发者可以灵活地控制网络请求行为、加密参数、错误处理策略等关键功能。
本模块采用单例模式设计,使用浏览器全局对象 `window.httpConfig` 作为配置存储容器,确保配置在整个应用生命周期内的持久性和一致性。配置系统支持多种配置项类型,包括基础数据类型、函数类型和回调函数类型,为不同场景提供灵活的配置选项。
## 项目结构
npm-tool 包采用模块化设计,配置管理相关的核心文件位于 `src/utils/` 目录下:
```mermaid
graph TB
subgraph "配置管理模块"
TsGlobalConfig[TsGlobalConfig.js
全局配置管理]
TsCrypto[TsCrypto.js
加密工具]
TsSM4[TsSM4.js
SM4算法实现]
end
subgraph "HTTP 请求模块"
TsHttpUtil[TsHttpUtil.js
HTTP 请求封装]
end
subgraph "存储模块"
TsStorage[TsStorage.js
本地存储]
end
subgraph "工具模块"
TsCommon[TsCommon.js
通用工具]
end
subgraph "入口文件"
Index[index.js
模块导出]
Package[package.json
包配置]
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): 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 包提供了强大而灵活的配置管理能力。通过统一的配置接口,开发者可以轻松地定制各种系统行为,包括网络请求、数据加密、错误处理等关键功能。
模块设计遵循了以下原则:
- **单一职责**:配置管理专注于配置的存储和读取
- **松耦合**:通过接口抽象降低模块间的依赖
- **可扩展性**:支持动态配置和运行时更新
- **安全性**:提供加密配置和参数验证机制
未来可以考虑的功能增强:
- 配置版本管理
- 配置热重载机制
- 更完善的配置验证和错误提示
- 配置持久化到本地存储