# Shared 模块导出规范

## 导出路径组织

为了保持代码的清晰性和可维护性，shared 包的模块导出已按照功能分类组织。

### 组件模块 (Components)

```typescript
// 整体导出
import { FileUpload, DynamicFormItem } from 'shared/components'

// 单独导入（推荐）
import FileUpload from 'shared/components/file/FileUpload'
import DynamicFormItem from 'shared/components/DynamicFormItem'
```

**可用组件：**
- `shared/components/file/FileUpload` - 文件上传组件（支持 cover/dialog/content 三种模式）
- `shared/components/DynamicFormItem` - 动态表单项组件

---

### API 模块

```typescript
// 整体导出
import { api, TokenManager } from 'shared/api'

// 单独导入（推荐）
import { authAPI } from 'shared/api/auth'
import { fileAPI } from 'shared/api/file'
```

**可用 API：**
- `shared/api` - API 基础模块和 TokenManager
- `shared/api/auth` - 认证相关 API
- `shared/api/file` - 文件管理 API

---

### Utils 工具模块

```typescript
// 整体导出
import { formatFileSize, isImageFile } from 'shared/utils'

// 单独导入
import { getDeviceType, isMobile } from 'shared/utils/device'
import { 
    generateSimpleRoutes, 
    loadViewsFromStorage,
    buildMenuTree 
} from 'shared/utils/route'
import { formatFileSize, isImageFile } from 'shared/utils/file'
```

**可用工具：**
- `shared/utils` - 通用工具函数集合
- `shared/utils/device` - 设备检测工具
- `shared/utils/route` - 路由生成和菜单构建工具
  - `generateSimpleRoutes()` - 生成简化路由（适合直接添加到 router）
  - `loadViewsFromStorage()` - 从 localStorage 加载视图数据
  - `buildMenuTree()` - 构建菜单树结构
  - `generateRoutes()` - 生成完整路由配置
  - 更多工具函数...
- `shared/utils/file` - 文件处理工具

---

### Types 类型模块

```typescript
// 整体导出
import type { LoginParam, TbSysViewDTO } from 'shared/types'

// 单独导入
import type { LoginParam, LoginDomain } from 'shared/types/auth'
import type { TbSysFileDTO } from 'shared/types/file'
import type { SysUserVO, SysConfigVO } from 'shared/types/sys'
```

**可用类型：**
- `shared/types` - 所有类型的统一导出
- `shared/types/base` - 基础类型（BaseVO, BaseDTO 等）
- `shared/types/auth` - 认证相关类型
- `shared/types/file` - 文件相关类型
- `shared/types/sys` - 系统相关类型

---

## 向后兼容性

为了保持向后兼容，旧的导入路径仍然可用（但不推荐）：

```typescript
// ❌ 旧路径（不推荐，但仍可用）
import FileUpload from 'shared/FileUpload'
import { authAPI } from 'shared/authAPI'
import { fileAPI } from 'shared/fileAPI'

// ✅ 新路径（推荐）
import FileUpload from 'shared/components/file/FileUpload'
import { authAPI } from 'shared/api/auth'
import { fileAPI } from 'shared/api/file'
```

---

## 最佳实践

### 1. 使用明确的路径

```typescript
// ✅ 推荐：路径清晰，便于理解
import FileUpload from 'shared/components/file/FileUpload'
import { authAPI } from 'shared/api/auth'

// ❌ 不推荐：路径模糊
import FileUpload from 'shared/FileUpload'
```

### 2. 按需导入

```typescript
// ✅ 推荐：只导入需要的模块
import { formatFileSize } from 'shared/utils/file'

// ❌ 不推荐：导入整个模块
import * as utils from 'shared/utils'
```

### 3. 使用类型导入

```typescript
// ✅ 推荐：明确标识类型导入
import type { LoginParam } from 'shared/types/auth'
import { authAPI } from 'shared/api/auth'

// ❌ 不推荐：混合导入
import { LoginParam, authAPI } from 'shared/types'
```

---

## 添加新模块

如果需要添加新的导出模块，请按照以下步骤：

1. **在 vite.config.ts 中添加导出**
   ```typescript
   exposes: {
       './components/YourComponent': './src/components/yourcomponent/YourComponent.vue'
   }
   ```

2. **在 shared.d.ts 中添加类型声明**
   ```typescript
   declare module 'shared/components/YourComponent' {
       import { DefineComponent } from 'vue'
       const YourComponent: DefineComponent<{}, {}, any>
       export default YourComponent
   }
   ```

3. **更新此文档**

---

## 常见问题

### Q: TypeScript 报错找不到模块？
A: 尝试以下方法：
1. 重启 TypeScript 语言服务器（VS Code: `Ctrl+Shift+P` → Restart TS Server）
2. 确认 `shared.d.ts` 文件已正确更新
3. 检查 shared 包是否已正确构建

### Q: 运行时找不到模块？
A: 确保：
1. shared 包已启动（`npm run dev` 在 shared 目录）
2. `vite.config.ts` 中的 exposes 配置正确
3. Module Federation 配置正确加载

### Q: 如何查看所有可用模块？
A: 查看 `packages/shared/vite.config.ts` 的 `exposes` 配置

---

## 更新日志

### 2025-12-12
- ✅ 重新组织导出路径，使用清晰的分类前缀
- ✅ 添加向后兼容性支持
- ✅ 更新类型声明文件
- ✅ 添加更多常用模块导出
