# Monorepo 约定

[English](monorepo.md) | 简体中文

## 命令与 workspace

当您只想操作一个 workspace 时，请在仓库根目录使用带显式路径的 workspace 命令：

```bash
npm run build --workspace packages/core
npm run dev --workspace apps/demo
```

（在包名没有歧义时，也可以直接使用 workspace 的包名，例如 `npm run dev --workspace demo`。）

## Workspace 角色

- `packages/*`：可复用包；SDK 位于 `packages/core`，但其 **npm 包名** 仍为 `@paddleocr/paddleocr-js`
- `apps/*`：私有应用（如 `apps/demo`），不作为 npm 产品发布

## 版本与发布

- **目录：** `packages/core` — 对外 npm 包的源码与发布清单
- **npm 包名：** `@paddleocr/paddleocr-js` — 用户 `npm install` 后在代码中实际导入的名称
- **目录：** `apps/demo` — 私有 demo，不是 npm 发布目标
- 版本由 Changesets 管理；demo 包在 `.changeset/config.json` 中被忽略
- `npm run release` 会构建 SDK 并通过 `changeset publish` 发布
- `packages/core` 的 `prepublishOnly` 会在 `npm publish` / `npm pack` 前自动执行构建

## Lint 与测试

- `packages/**/src/**/*.ts` 使用 `strictTypeChecked` TypeScript 规则，并启用面向浏览器的全局变量
- `packages/**/test/**/*.ts` 使用较轻的 `recommendedTypeChecked` 规则集（浏览器 + Node 全局），并放宽部分规则，例如 `no-unsafe-*` 和 `no-explicit-any`
- `apps/**/src/**/*.ts` 同样使用 `strictTypeChecked` TypeScript 规则与浏览器全局变量
- `apps/**/*.js`、仓库根目录配置文件（`*.config.{js,ts}`）以及包内配置文件（`packages/**/*.config.*`）使用基础 ESLint 规则，同时启用 Node 与浏览器全局
