# 核心模块 **本文引用的文件** - [README.md](file://README.md) - [package.json](file://package.json) - [index.js](file://index.js) - [TsCommon.js](file://src/utils/TsCommon.js) - [TsCrypto.js](file://src/utils/TsCrypto.js) - [TsGlobalConfig.js](file://src/utils/TsGlobalConfig.js) - [TsSM4.js](file://src/utils/TsSM4.js) - [TsStorage.js](file://src/utils/TsStorage.js) - [TsHttpUtil.js](file://src/https/TsHttpUtil.js) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) ## 简介 npm-tool 是一个专为前端应用设计的综合性工具包,提供了网络请求、数据加密、存储管理、通用工具函数等核心功能。该工具包采用模块化设计,通过清晰的职责分离和接口抽象,为开发者提供了一套完整的前端开发基础设施。 本工具包的核心设计理念包括: - **模块化架构**:每个功能模块独立封装,职责单一明确 - **可扩展性**:通过配置中心支持运行时配置调整 - **安全性**:内置SM4对称加密算法,保障数据传输安全 - **易用性**:提供简洁的API接口,降低使用复杂度 ## 项目结构 项目采用按功能域组织的目录结构,主要分为以下层次: ```mermaid graph TB subgraph "根目录" Root[index.js] Package[package.json] Readme[README.md] end subgraph "源代码结构" Utils[src/utils/] Https[src/https/] subgraph "工具模块" Common[TsCommon.js] Crypto[TsCrypto.js] SM4[TsSM4.js] Storage[TsStorage.js] GlobalConfig[TsGlobalConfig.js] end subgraph "HTTP模块" HttpUtil[TsHttpUtil.js] end end Root --> Utils Root --> Https Utils --> Common Utils --> Crypto Utils --> SM4 Utils --> Storage Utils --> GlobalConfig Https --> HttpUtil ``` **图表来源** - [index.js:1-16](file://index.js#L1-L16) - [package.json:1-24](file://package.json#L1-L24) **章节来源** - [index.js:1-16](file://index.js#L1-L16) - [package.json:1-24](file://package.json#L1-L24) ## 核心组件 npm-tool 工具包由六个核心模块组成,每个模块都有明确的职责分工: ### 模块职责矩阵 | 模块名称 | 主要职责 | 关键功能 | 依赖关系 | |---------|----------|----------|----------| | TsCommon | 通用工具函数 | 字符串处理、类型判断、URL解析 | 无 | | TsStorage | 数据持久化 | 本地存储、用户令牌管理 | TsCommon | | TsSM4 | SM4加密算法 | 对称加密解密、密钥管理 | base64-js | | TsCrypto | 加密服务层 | 加密解密接口、密钥转换 | TsSM4, TsGlobalConfig | | TsGlobalConfig | 全局配置管理 | 配置读取设置、运行时配置 | 无 | | TsHttpUtil | HTTP请求封装 | 网络请求、参数处理、错误处理 | umi-request | **章节来源** - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) - [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456) - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) - [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34) - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) ## 架构概览 工具包采用分层架构设计,从底层到上层依次为:基础工具层、加密服务层、存储管理层、HTTP请求层。 ```mermaid graph TB subgraph "应用层" App[业务应用] end subgraph "HTTP请求层" HttpUtil[TsHttpUtil] Request[umi-request] end subgraph "加密服务层" Crypto[TsCrypto] SM4[TsSM4] Base64[base64-js] end subgraph "存储管理层" Storage[TsStorage] LocalStorage[localStorage] end subgraph "配置管理层" GlobalConfig[TsGlobalConfig] end subgraph "工具函数层" Common[TsCommon] end App --> HttpUtil HttpUtil --> Crypto HttpUtil --> Storage HttpUtil --> GlobalConfig HttpUtil --> Request Crypto --> SM4 Crypto --> Base64 Storage --> Common SM4 --> Base64 ``` **图表来源** - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) - [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456) - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) - [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34) - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) ## 详细组件分析 ### TsCommon 通用工具模块 TsCommon 模块提供了一系列基础的工具函数,涵盖了字符串处理、类型判断、URL解析等常用功能。 #### 核心功能特性 ```mermaid classDiagram class TsCommon { +getParamFormUrl(key, host) string +isEmpty(value) boolean +parseJSON(value, def) any +split(obj, seq) string[] +isDevelopment() boolean +replaceAll(string, s1, s2) string +endWith(string, endStr) boolean } note for TsCommon "提供基础工具函数
字符串处理
类型判断
URL解析" ``` **图表来源** - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) #### 设计模式与实现要点 - **纯函数设计**:所有函数都是无状态的纯函数,便于测试和复用 - **容错处理**:对可能的异常情况进行了充分的try-catch处理 - **类型安全**:通过严格的参数验证确保函数的健壮性 **章节来源** - [TsCommon.js:1-98](file://src/utils/TsCommon.js#L1-L98) ### TsStorage 存储模块 TsStorage 模块基于 localStorage 实现了数据持久化功能,特别针对用户令牌和配置信息进行了优化。 #### 数据存储策略 ```mermaid flowchart TD Start([存储请求]) --> CheckType{"检查数据类型"} CheckType --> |对象| Serialize["JSON序列化"] CheckType --> |基本类型| Direct["直接存储"] Serialize --> Wrap["包装为{data: value}"] Direct --> Wrap Wrap --> Save["localStorage.setItem"] Save --> End([存储完成]) subgraph "读取流程" LoadStart([读取请求]) --> GetItem["localStorage.getItem"] GetItem --> Parse["JSON.parse"] Parse --> Extract["提取data字段"] Extract --> LoadEnd([返回数据]) end ``` **图表来源** - [TsStorage.js:26-44](file://src/utils/TsStorage.js#L26-L44) #### 特殊功能设计 - **用户令牌管理**:专门的token存储接口,简化了认证流程 - **加密开关控制**:支持动态启用/禁用数据加密 - **默认值处理**:提供灵活的默认值机制 **章节来源** - [TsStorage.js:1-55](file://src/utils/TsStorage.js#L1-L55) ### TsSM4 加密算法模块 TsSM4 模块实现了国家商用密码标准 SM4 的完整算法,支持ECB和CBC两种加密模式。 #### SM4算法实现架构 ```mermaid classDiagram class TsSM4 { -key Uint8Array -iv Uint8Array -mode string -cipherType string -encryptRoundKeys Uint32Array -decryptRoundKeys Uint32Array +constructor(config) +encrypt(plaintext) string +decrypt(ciphertext) string -doBlockCrypt(blockData, roundKeys) Uint32Array -spawnEncryptRoundKeys() void -padding(originalBuffer) Uint8Array -dePadding(paddedBuffer) Uint8Array } class Crypt { +stringToArrayBufferInUtf8(str) Uint8Array +utf8ArrayBufferToString(buffer) string +arrayBufferToBase64(buffer) string +base64ToArrayBuffer(base64) Uint8Array } TsSM4 --> Crypt : "使用" ``` **图表来源** - [TsSM4.js:96-453](file://src/utils/TsSM4.js#L96-L453) #### 加密算法特性 - **双模式支持**:同时支持ECB和CBC加密模式 - **密钥管理**:自动密钥扩展和轮转密钥生成 - **填充机制**:实现PKCS#7填充标准 - **编码转换**:支持Base64和文本两种输出格式 **章节来源** - [TsSM4.js:1-456](file://src/utils/TsSM4.js#L1-L456) ### TsCrypto 加密服务模块 TsCrypto 作为加密服务层,提供了统一的加密解密接口,并与全局配置系统集成。 #### 加密服务架构 ```mermaid sequenceDiagram participant Client as 客户端 participant Crypto as TsCrypto participant SM4 as TsSM4 participant Config as TsGlobalConfig Client->>Crypto : encrypt(content) Crypto->>Config : getConfig() Config-->>Crypto : base64Key Crypto->>SM4 : new SM4(config) Crypto->>SM4 : encrypt(content) SM4-->>Crypto : encryptedData Crypto-->>Client : 返回加密结果 ``` **图表来源** - [TsCrypto.js:5-31](file://src/utils/TsCrypto.js#L5-L31) #### 服务设计特点 - **配置驱动**:通过全局配置管理密钥和加密参数 - **接口统一**:提供简洁的加密解密API - **依赖注入**:通过构造函数注入底层加密实现 **章节来源** - [TsCrypto.js:1-34](file://src/utils/TsCrypto.js#L1-L34) ### TsGlobalConfig 全局配置模块 TsGlobalConfig 提供了全局配置管理功能,支持运行时配置更新和默认配置机制。 #### 配置管理流程 ```mermaid flowchart TD Init([初始化]) --> LoadDefault["加载默认配置"] LoadDefault --> CheckWindow{"检查window.httpConfig"} CheckWindow --> |存在| MergeConfig["合并配置"] CheckWindow --> |不存在| UseDefault["使用默认配置"] MergeConfig --> StoreConfig["存储到window.httpConfig"] UseDefault --> StoreConfig StoreConfig --> ExportConfig["导出配置接口"] subgraph "配置更新" Update([setConfig]) --> Merge["深度合并"] Merge --> Store["存储到window.httpConfig"] Store --> Notify["通知配置变更"] end ``` **图表来源** - [TsGlobalConfig.js:15-29](file://src/utils/TsGlobalConfig.js#L15-L29) #### 配置系统设计 - **默认值机制**:提供完善的默认配置,确保系统稳定性 - **运行时更新**:支持在应用运行时动态更新配置 - **环境适配**:支持函数形式的动态配置生成 **章节来源** - [TsGlobalConfig.js:1-34](file://src/utils/TsGlobalConfig.js#L1-L34) ### TsHttpUtil HTTP请求模块 TsHttpUtil 是工具包的核心模块,封装了网络请求的所有细节,提供了简洁易用的API。 #### HTTP请求处理流程 ```mermaid sequenceDiagram participant Client as 客户端 participant HttpUtil as TsHttpUtil participant Storage as TsStorage participant Crypto as TsCrypto participant Request as umi-request participant Server as 服务器 Client->>HttpUtil : post(url, data) HttpUtil->>HttpUtil : dealParamsBody(options) HttpUtil->>Storage : getEncryptBody() Storage-->>HttpUtil : 加密开关状态 HttpUtil->>Crypto : encrypt(JSON.stringify(data)) Crypto-->>HttpUtil : 加密后的数据 HttpUtil->>Request : request(url, options) Request->>Server : HTTP请求 Server-->>Request : 响应数据 Request-->>HttpUtil : 响应对象 HttpUtil->>HttpUtil : 处理响应数据 HttpUtil-->>Client : {data, recordsTotal} ``` **图表来源** - [TsHttpUtil.js:99-134](file://src/https/TsHttpUtil.js#L99-L134) #### 请求处理核心逻辑 - **参数预处理**:统一处理分页参数、equals条件等特殊需求 - **动态前缀**:支持根据URL动态生成API前缀 - **加密处理**:根据配置自动对请求体进行加密 - **响应解密**:自动解密服务器返回的加密数据 - **错误处理**:统一的错误处理和状态码映射 **章节来源** - [TsHttpUtil.js:1-171](file://src/https/TsHttpUtil.js#L1-L171) ## 依赖分析 工具包的依赖关系体现了清晰的分层架构和模块化设计原则。 ```mermaid graph TB subgraph "外部依赖" UmiRequest[umi-request@1.4.0] Base64Js[base64-js@1.5.1] end subgraph "内部模块依赖" index[index.js] subgraph "HTTP模块" TsHttpUtil TsStorage TsCrypto TsGlobalConfig end subgraph "工具模块" TsCommon TsSM4 end end index --> TsHttpUtil index --> TsCommon index --> TsStorage index --> TsSM4 index --> TsCrypto index --> TsGlobalConfig TsHttpUtil --> UmiRequest TsHttpUtil --> TsStorage TsHttpUtil --> TsCrypto TsHttpUtil --> TsGlobalConfig TsHttpUtil --> TsCommon TsCrypto --> TsSM4 TsCrypto --> Base64Js TsCrypto --> TsGlobalConfig TsStorage --> TsCommon TsSM4 --> Base64Js ``` **图表来源** - [package.json:19-22](file://package.json#L19-L22) - [index.js:1-6](file://index.js#L1-L6) ### 依赖关系分析 #### 直接依赖 - **umi-request**:HTTP请求库,提供网络通信能力 - **base64-js**:Base64编码解码工具 #### 间接依赖 - **TsHttpUtil** 依赖于所有其他模块,形成核心依赖环 - **TsCrypto** 依赖于TsSM4和TsGlobalConfig - **TsStorage** 依赖于TsCommon #### 循环依赖检测 该工具包采用了良好的模块化设计,避免了循环依赖问题。TsHttpUtil虽然依赖多个模块,但这种依赖关系是单向的,符合模块化设计原则。 **章节来源** - [package.json:19-22](file://package.json#L19-L22) - [index.js:1-16](file://index.js#L1-L16) ## 性能考虑 ### 内存使用优化 1. **流式处理**:TsSM4算法采用分块处理方式,避免大内存占用 2. **对象复用**:在加密过程中重用Uint32Array对象,减少GC压力 3. **延迟初始化**:TsCrypto在首次使用时才初始化SM4实例 ### 网络性能优化 1. **请求合并**:TsHttpUtil支持将额外参数合并到请求中,减少请求次数 2. **缓存策略**:结合localStorage实现数据缓存,减少重复请求 3. **异步处理**:所有网络请求都采用Promise异步处理,避免阻塞主线程 ### 加密性能优化 1. **轮转密钥**:TsSM4算法预先计算轮转密钥,避免重复计算 2. **位运算优化**:大量使用位运算替代乘除法,提高执行效率 3. **内存对齐**:使用TypedArray确保内存对齐,提升访问速度 ## 故障排除指南 ### 常见问题及解决方案 #### 加密相关问题 **问题**:加密后数据无法正确解密 - **原因**:密钥不匹配或加密模式不一致 - **解决方案**:检查TsGlobalConfig中的base64Key配置,确认加密模式设置 **问题**:Base64编码异常 - **原因**:输入数据包含特殊字符 - **解决方案**:使用TsCommon.parseJSON进行安全解析 #### HTTP请求问题 **问题**:请求超时或失败 - **原因**:umi-request配置问题或网络异常 - **解决方案**:检查TsGlobalConfig中的prefix配置,确认网络连接状态 **问题**:响应数据格式异常 - **原因**:服务器返回格式不符合预期 - **解决方案**:检查TsHttpUtil的响应处理逻辑,添加适当的错误处理 #### 存储相关问题 **问题**:localStorage存储失败 - **原因**:浏览器隐私模式或存储空间不足 - **解决方案**:添加存储容量检查和降级方案 **章节来源** - [TsHttpUtil.js:25-35](file://src/https/TsHttpUtil.js#L25-L35) - [TsCrypto.js:15-30](file://src/utils/TsCrypto.js#L15-L30) - [TsStorage.js:26-44](file://src/utils/TsStorage.js#L26-L44) ## 结论 npm-tool 工具包通过精心设计的模块化架构,为前端开发提供了完整的基础设施支持。其核心优势包括: ### 技术优势 1. **模块化设计**:每个模块职责单一,便于维护和扩展 2. **安全性保障**:内置SM4加密算法,提供企业级数据保护 3. **易用性**:提供简洁的API接口,降低学习成本 4. **可配置性**:通过全局配置系统支持灵活的运行时调整 ### 架构决策 1. **分层架构**:从底层工具函数到上层业务封装,层次清晰 2. **依赖注入**:通过构造函数注入依赖,提高模块独立性 3. **配置驱动**:将可变因素抽象为配置,增强系统灵活性 4. **错误处理**:统一的错误处理机制,提升系统稳定性 ### 最佳实践建议 1. **模块组合使用**:建议按照TsHttpUtil → TsCrypto → TsSM4的顺序使用加密功能 2. **配置管理**:通过TsGlobalConfig集中管理所有可配置项 3. **错误处理**:在业务层添加适当的错误处理和用户反馈 4. **性能监控**:定期监控加密和网络请求的性能指标 该工具包为前端开发提供了一个可靠、安全、易用的基础框架,适合在企业级应用中使用。