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

12 KiB
Raw Permalink Blame History

配置管理 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/ 目录下:

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

图表来源

章节来源

核心组件

全局配置系统

全局配置系统是整个模块的核心,提供了配置的存储、读取和更新功能。系统采用默认配置与用户配置相结合的设计模式,确保在任何情况下都有可用的配置。

配置项类型定义

配置项名称 类型 默认值 描述
base64Key string "WmdUzPJXbngVNiaSsQrihg==" SM4 加密算法的 Base64 密钥
prefix string/function "" API 前缀,可为字符串或函数
onHttpError function (res) => {} HTTP 错误处理回调函数
httpParams function (res) => {} HTTP 请求参数处理函数

配置优先级机制

配置系统采用以下优先级顺序:

  1. 用户配置:通过 setConfig() 设置的最新配置
  2. 全局配置:存储在 window.httpConfig 中的配置
  3. 默认配置:硬编码在代码中的默认值

章节来源

架构概览

配置管理模块采用分层架构设计,确保各组件之间的松耦合和高内聚:

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

图表来源

配置更新流程

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)

配置管理器是整个系统的核心组件,负责管理全局配置的生命周期。

方法签名

// 获取当前配置
function getConfig(): ConfigObject

// 设置配置
function setConfig(obj?: Partial<ConfigObject>): void

配置对象结构

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

图表来源

配置验证规则

配置系统实现了以下验证机制:

  1. 类型验证:确保配置项符合预期类型
  2. 函数验证:验证回调函数的可调用性
  3. 密钥验证:验证加密密钥的有效性

章节来源

HTTP 工具集成

HTTP 工具通过配置管理器获取运行时配置,实现动态配置管理。

配置使用流程

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([结束])

图表来源

配置项详细说明

配置项 类型 默认值 作用域 说明
base64Key string "WmdUzPJXbngVNiaSsQrihg==" 全局 SM4 加密算法密钥,用于数据加解密
prefix string/function "" HTTP 请求 API 基础路径,支持动态函数生成
onHttpError function (res) => {} HTTP 请求 自定义错误处理逻辑
httpParams function (res) => {} HTTP 请求 动态添加请求参数

章节来源

加密模块集成

加密模块通过配置管理器获取密钥信息,实现安全的数据传输。

加密配置流程

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 : 返回加密结果

图表来源

章节来源

依赖关系分析

配置管理模块与其他模块的依赖关系如下:

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

图表来源

模块导出结构

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

图表来源

章节来源

性能考虑

配置管理模块在设计时充分考虑了性能优化:

缓存机制

  • 配置读取采用缓存策略,避免重复的对象合并操作
  • 加密器实例化后复用,减少内存分配开销

异步处理

  • 配置更新采用异步方式,不影响主线程执行
  • HTTP 请求处理支持 Promise 异步模式

内存管理

  • 配置对象采用浅拷贝策略,减少内存占用
  • 及时清理不再使用的配置引用

故障排除指南

常见配置问题

配置不生效

症状:设置配置后,系统仍然使用默认配置 解决方案

  1. 确认配置对象的键名正确
  2. 检查配置值的类型是否符合要求
  3. 验证配置更新时机是否正确

加密失败

症状:数据加密或解密过程中出现错误 解决方案

  1. 验证 base64Key 的长度是否为 16 字节
  2. 检查密钥格式是否正确
  3. 确认加密模式配置正确

HTTP 请求异常

症状:网络请求失败或返回错误 解决方案

  1. 检查 prefix 配置是否正确
  2. 验证 onHttpError 回调函数逻辑
  3. 确认 httpParams 函数返回正确的参数对象

章节来源

结论

配置管理模块为 npm-tool 包提供了强大而灵活的配置管理能力。通过统一的配置接口,开发者可以轻松地定制各种系统行为,包括网络请求、数据加密、错误处理等关键功能。

模块设计遵循了以下原则:

  • 单一职责:配置管理专注于配置的存储和读取
  • 松耦合:通过接口抽象降低模块间的依赖
  • 可扩展性:支持动态配置和运行时更新
  • 安全性:提供加密配置和参数验证机制

未来可以考虑的功能增强:

  • 配置版本管理
  • 配置热重载机制
  • 更完善的配置验证和错误提示
  • 配置持久化到本地存储