# Monorepo 迁移总结

## ✅ 已完成

### 1. 基础架构
- ✅ 创建 `pnpm-workspace.yaml`
- ✅ 创建根 `package.json` (统一脚本管理)
- ✅ 创建 `.npmrc` (pnpm 配置)
- ✅ 创建 `tsconfig.base.json` (共享 TypeScript 配置)

### 2. nanomem 包
- ✅ 创建 `packages/nanomem/` 目录结构
- ✅ 移动所有源文件到 `packages/nanomem/src/`
- ✅ 创建 `packages/nanomem/package.json`
- ✅ 创建 `packages/nanomem/tsconfig.json`
- ✅ 创建 `packages/nanomem/README.md`

### 3. 文档
- ✅ `单体仓库迁移指南.md` - 详细迁移指南
- ✅ `单体仓库自述.md` - Monorepo 总览

---

## 📋 待完成任务

### 高优先级

1. **迁移 nanopencil 主包**
   ```bash
   mkdir -p packages/nanopencil/src
   mv core/ modes/ cli/ utils/ extensions/ packages/nanopencil/src/
   mv *.ts packages/nanopencil/src/
   ```

2. **更新 nanopencil/package.json**
   - 修改依赖：`nanomem` → `@nanopencil/nanomem@workspace:*`
   - 更新 exports 配置
   - 添加 scripts

3. **更新导入路径**
   ```typescript
   // 旧
   import { NanoMemEngine } from '../../../core/extensions/nanomem';

   // 新
   import { NanoMemEngine } from '@nanopencil/nanomem';
   ```

4. **更新扩展集成**
   ```typescript
   // pencil-mem-integration.ts
   import nanomemExtension from '@nanopencil/nanomem/extension';
   ```

### 中优先级

5. **创建 simplify 包**
   ```bash
   mkdir -p packages/simplify/src
   mv extensions/simplify/* packages/simplify/src/
   ```

6. **测试 workspace 依赖**
   ```bash
   pnpm install
   pnpm build
   pnpm dev
   ```

7. **配置 Changesets**
   ```bash
   pnpm add -Dw @changesets/cli
   pnpm changeset init
   ```

### 低优先级

8. **配置 CI/CD**
   - GitHub Actions / GitLab CI
   - 自动构建和测试
   - 自动发布

9. **添加代码质量工具**
   - ESLint
   - Prettier
   - Husky (pre-commit hooks)

10. **性能优化**
    - 配置增量构建
    - 并行测试

---

## 🚀 快速迁移命令

```bash
# 1. 安装 pnpm
npm install -g pnpm

# 2. 安装依赖
pnpm install

# 3. 迁移 nanopencil 主包
mkdir -p packages/nanopencil/src
mv core modes cli utils extensions packages/nanopencil/src/
mv *.ts packages/nanopencil/src/ 2>/dev/null || true
mv package.json packages/nanopencil/
mv tsconfig.json packages/nanopencil/

# 4. 迁移 simplify 扩展
mkdir -p packages/simplify/src
mv packages/nanopencil/src/extensions/simplify/* packages/simplify/src/

# 5. 构建所有包
pnpm -r build

# 6. 测试
pnpm dev
```

---

## 📊 包大小预估

| 包 | 源文件 | 构建产物 |
|---|--------|----------|
| nanomem | ~17 文件 | ~50 KB |
| nanopencil | ~80+ 文件 | ~500 KB |
| simplify | ~1 文件 | ~20 KB |

---

## ⚠️ 注意事项

### 导入路径变更

**旧结构**:
```
nanopencil/
├── core/
│   └── extensions/
│       └── nanomem/ (作为子目录)
```

**新结构**:
```
packages/
├── nanomem/ (独立包)
└── nanopencil/
    └── depends on: @nanopencil/nanomem
```

**需要更新的文件**:
- `pencil-mem-integration.ts`
- `main.ts` (扩展加载逻辑)
- 任何直接引用 nanomem 的代码

### 环境变量

保持不变，无需修改：
- `NANOMEM_MEMORY_DIR`
- `NANOMEM_TOKEN_BUDGET`
- `NANOMEM_LOCALE`

### 发布流程

**nanomem** (独立发布):
```bash
cd packages/nanomem
pnpm publish
```

**nanopencil** (依赖 nanomem):
```bash
cd packages/nanopencil
pnpm publish
```

**使用 Changesets** (推荐):
```bash
pnpm changeset
pnpm changeset version
pnpm changeset publish
```

---

## 🎯 目标架构优势

1. ✅ **清晰的责任边界** - nanomem 独立，可单独使用
2. ✅ **灵活的依赖管理** - workspace 协议自动链接
3. ✅ **原子提交** - 跨包更改在单一 PR
4. ✅ **独立发布** - nanomem 可单独版本迭代
5. ✅ **更好的 CI/CD** - 增量构建，并行测试
6. ✅ **开发者友好** - 统一配置，共享工具

---

## 📖 相关文档

- [pnpm Workspaces](https://pnpm.io/workspaces)
- [Changesets](https://github.com/changesets/changesets)
- [TypeScript Project References](https://www.typescriptlang.org/docs/handbook/project-references.html)
- [Monorepo 最佳实践](https://nx.dev/latest/react/monorepo/choose-your-monorepo)
