160 lines
4.5 KiB
Markdown
160 lines
4.5 KiB
Markdown
# monorepo-template
|
|
|
|
## 分包、分仓原则
|
|
|
|
### 分仓
|
|
|
|
- 原则上,将关联性强的库放在同一monorepo仓库下,便于调试、开发以及版本管理
|
|
- 关联性不强,仅引用某个包的库不建议都放在同一仓库中,可能带来管理上的负担
|
|
|
|
### 分包
|
|
|
|
- 不同目的、功能应分在不同包中
|
|
- 想要进行单独的版本控制、构建、发布等,应分在不同包中
|
|
|
|
## monorepo目录
|
|
|
|
```bash
|
|
.
|
|
├── .husky # git钩子
|
|
├── .vscode # vscode配置
|
|
├── docs # 文档目录
|
|
├── packages # 存放组件包
|
|
│ ├── xxxx # 组件包1
|
|
│ └── xxxx # 组件包2
|
|
├── play # 调试目录
|
|
├── eslint.config.ts # eslint配置
|
|
├── commitlint.config.js # commitlint配置
|
|
├── unoconfig.ts # unocss配置
|
|
├── package.json # 项目配置
|
|
├── .npmrc # npm配置
|
|
├── .nvmrc # nvm配置
|
|
├── pnpm-workspace.yaml # pnpm workspace配置
|
|
├── vitest.workspace.ts # vitest workspace配置
|
|
├── README.mdx # 生成文档时的描述文件
|
|
└── READM.md # 项目自述
|
|
|
|
```
|
|
|
|
## 命名规范
|
|
|
|
- 项目以`fe-xxx`开头
|
|
- npm包应统一放在`@lingshu`的命名空间下,包名全称应为`@lingshu/xxx`
|
|
- 内部通用组件以ls开头,例如`<ls-contacts-select>`
|
|
|
|
## 新建npm包
|
|
|
|
### 复用模板
|
|
|
|
拷贝复制demo1-components文件夹
|
|
|
|
### 修改
|
|
|
|
- 修改文件夹名(推荐以包名为文件夹名)
|
|
- 修改`packages.json`文件
|
|
- `name`
|
|
- `version`
|
|
- 修改`README.md`文件
|
|
- 根据需要修改src中文件进行开发
|
|
|
|
### 添加调试与文档
|
|
|
|
> 具体看下方`调试`,`文档`
|
|
|
|
## 调试
|
|
|
|
调试统一通过play文件夹下的playground进行调试
|
|
为调试子包中的内容,需要按以下步骤
|
|
|
|
1. 在play文件夹下的package.json中添加子包为依赖,版本为"workspace:\*”
|
|
2. 根目录下运行命令
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
3. 根据子包的使用方式,修改playground中src中代码,引用子包
|
|
4. 修改子包代码可以通过热更新实时生效
|
|
|
|
> 为保证调试正常,子包入口文件需强制为src/index,模板默认已配好,若无必要请勿改动
|
|
>
|
|
> playground中将所有子包的`@`指向为对应包的`src`目录
|
|
|
|
### mock
|
|
|
|
调试mock统一写在play文件夹下的mock文件夹下
|
|
|
|
mock启动指令
|
|
|
|
```bash
|
|
pnpm dev:mock
|
|
```
|
|
|
|
## 文档生成
|
|
|
|
基于[storybook](https://storybook.js.org/docs)
|
|
|
|
### 文档相关目录
|
|
|
|
```bash
|
|
.
|
|
├── docs # 文档目录
|
|
│ └── .storybook # 组件包2
|
|
│ ├── main.ts # 文档配置
|
|
│ ├── manager.ts # 文档管理
|
|
│ ├── preview.ts # 文档预览配置,有关样式和组件在此引入
|
|
│ └── theme.ts # 文档主题
|
|
├── packages
|
|
│ ├── xxxx # 组件包1
|
|
│ │ ├── Introduction.mdx # 包描述文档
|
|
│ │ └── src
|
|
│ │ └── **
|
|
│ │ └── *.stories.ts # 组件文档
|
|
│ └── xxxx # 组件包2
|
|
└── READM.mdx # 仓库总描述文档
|
|
|
|
```
|
|
|
|
### 文档编写
|
|
|
|
参考[storybook文档](https://storybook.js.org/docs/get-started/frameworks/vue3-vite)
|
|
|
|
> 若组件库中有使用其他npm包,在app中注册,则需要在`docs/.storybook/preview.ts`中以相同方式注册,如`element-plus`
|
|
|
|
```typescript
|
|
// docs/.storybook/preview.ts
|
|
import ElementPlus from 'element-plus-cisdi';
|
|
import 'element-plus-cisdi/dist/index.css';
|
|
|
|
setup((app) => {
|
|
app.use(ElementPlus);
|
|
});
|
|
```
|
|
|
|
#### 库说明文档
|
|
|
|
写在组件包根目录下的Introduction.mdx中,支持markdown语法和javascript语法,具体可看[storybook/MDX](https://storybook.js.org/docs/writing-docs/mdx)
|
|
|
|
#### 组件文档
|
|
|
|
1.在组件同级新建`.stories.ts`文件,并确保能被 文档配置的`main.ts`中的`stories`路径匹配`.stories.ts`文件可参考模板中文件,其中`title` 应以包名为前缀,如
|
|
|
|
```typescript
|
|
{
|
|
title: 'demo1-components/lingshuPlainText';
|
|
}
|
|
```
|
|
|
|
2.在组件中以JSDOC 标签写注释,支持props、emit、slot、expose
|
|
|
|
#### 指令
|
|
|
|
根目录下运行
|
|
|
|
```bash
|
|
pnpm storybook #预览生成的文档
|
|
pnpm build:storybook #打包构建文档
|
|
```
|
|
|
|
打包的文档在`docs/storybook-static`目录下
|