# 模块开发

## 规则（Rules）

# 模块开发规范

## 适用对象和范围

本规范适用于所有开发可复用Node.js代码模块的场景。

---

## 1. 命名规范

**规则**：函数名使用小驼峰（camelCase），变量和参数使用小写蛇形（snake_case），文件名使用小写蛇形。

- ✅ 正确：`function getUserData(user_id) {}`、`validate_input.js`
- ❌ 错误：`function get_user_data(userId) {}`、`ValidateInput.js`

**违反后果**：命名不一致导致模块接口混乱。

---

## 2. 导出规范

**规则**：模块必须使用 `module.exports` 导出公共API。

- ✅ 正确：`module.exports = { getUserData, validateInput };`
- ❌ 错误：忘记导出或使用错误的导出方式

**违反后果**：导出错误导致模块无法被正确引用。

---

## 3. 副作用规范

**规则**：禁止模块存在外部副作用（如修改全局变量、写入文件系统）。

**违反后果**：副作用导致模块行为不可预测，增加调试难度。

## 方法（Methods）

# 模块开发方法

## 前置条件

- [ ] 已明确需要封装的功能逻辑
- [ ] 已确定模块接口

## 流程概览

分析需求 → 设计模块结构 → 编写模块代码 → 编写测试用例 → 编写使用文档

## 详细步骤

### 步骤1：分析模块需求
分析需求文档，确定模块的功能接口和外部依赖。

### 步骤2：设计模块结构
设计模块的导出接口和内部实现结构。

### 步骤3：编写模块代码
编写入口文件和内部实现文件。

## 技巧（Tips）

# 模块开发技巧

## 1. 单一职责原则

**适用场景**：决定是否将功能拆分为独立模块时。

**具体做法**：每个模块只做一件事，如果模块功能超过一个，考虑拆分。

## 2. 使用JSDoc提供类型提示

**适用场景**：模块需要被其他开发者使用时。

**具体做法**：为所有导出函数添加JSDoc注释，提供参数和返回值类型信息。

## 3. 常见问题速查

| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 模块导出后为undefined | 导出方式错误 | 检查 `module.exports` |
| 循环依赖 | 模块互相引用 | 重构模块结构 |
| 全局变量污染 | 未使用模块作用域 | 使用 `const/let` 代替 `var` |
