@farris/cli 2.3.6 → 2.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commands/add-app.js +1 -1
- package/lib/commands/add-app.js.map +1 -1
- package/lib/commands/add-lib.js +1 -1
- package/lib/commands/add-lib.js.map +1 -1
- package/lib/commands/add-micro.js +12 -0
- package/lib/commands/add-micro.js.map +1 -0
- package/lib/commands/add-project.js +12 -10
- package/lib/commands/add-project.js.map +1 -1
- package/lib/commands/build-components.js +2 -2
- package/lib/commands/build-components.js.map +1 -1
- package/lib/commands/build-lib.js +1 -1
- package/lib/commands/build-lib.js.map +1 -1
- package/lib/commands/create-app-options.js +14 -3
- package/lib/commands/create-app-options.js.map +1 -1
- package/lib/commands/create-options.js +36 -10
- package/lib/commands/create-options.js.map +1 -1
- package/lib/commands/create.js +21 -11
- package/lib/commands/create.js.map +1 -1
- package/lib/commands/workspace/create.js +2 -2
- package/lib/commands/workspace/create.js.map +1 -1
- package/lib/common/constant.js +1 -1
- package/lib/common/constant.js.map +1 -1
- package/lib/common/generate-app.js +3 -6
- package/lib/common/generate-app.js.map +1 -1
- package/lib/common/project-layout.js +33 -61
- package/lib/common/project-layout.js.map +1 -1
- package/lib/common/safety.js +2 -3
- package/lib/common/safety.js.map +1 -1
- package/lib/common/template-manifest.js +4 -0
- package/lib/common/template-manifest.js.map +1 -1
- package/lib/common/verifier.js +21 -35
- package/lib/common/verifier.js.map +1 -1
- package/lib/common/workspace-contract.js +57 -23
- package/lib/common/workspace-contract.js.map +1 -1
- package/lib/config/vite-lib.js +1 -1
- package/lib/config/vite-lib.js.map +1 -1
- package/lib/index.js +33 -10
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/create/.gitignore.tpl +28 -8
- package/templates/create/AGENTS.md +75 -45
- package/templates/create/README.md +44 -11
- package/templates/create/package.json +2 -1
- package/templates/lib/.gitignore.tpl +31 -1
- package/templates/lib/.gitlab-ci.yml +2 -2
- package/templates/lib/README.md +24 -1
- package/templates/lib/{test → components/__tests__}/index.spec.ts +1 -1
- package/templates/lib/{test → components/__tests__}/index.spec.tsx +2 -2
- package/templates/lib/farris.config.mjs +2 -2
- package/templates/lib/package.json +1 -1
- package/templates/lib/tsconfig.json +1 -2
- package/templates/lib/vitest.config.ts +4 -2
- package/templates/micro/.eslintrc.cjs +15 -0
- package/templates/micro/.gitignore.tpl +33 -0
- package/templates/micro/.gitlab-ci.yml +59 -0
- package/templates/micro/.prettierrc.json +8 -0
- package/templates/micro/farris.config.mjs +34 -0
- package/templates/micro/index.html +12 -0
- package/templates/micro/mock/README.md +40 -0
- package/templates/micro/package.json +46 -0
- package/templates/micro/src/App.tsx +25 -0
- package/templates/micro/src/locales/index.ts +5 -0
- package/templates/micro/src/main.ts +47 -0
- package/templates/micro/src/router/index.ts +24 -0
- package/templates/micro/src/views/AboutView.tsx +12 -0
- package/templates/micro/src/views/HomeView.tsx +13 -0
- package/templates/micro/src/views/__tests__/AboutView.spec.tsx +11 -0
- package/templates/micro/src/views/__tests__/HomeView.spec.tsx +11 -0
- package/templates/micro/tsconfig.json +18 -0
- package/templates/micro/vitest.config.ts +12 -0
- package/templates/mobile/.gitignore.tpl +25 -24
- package/templates/mobile/farris.config.mjs +2 -2
- package/templates/mobile/mock/README.md +10 -4
- package/templates/mobile/package.json +4 -2
- package/templates/mobile/src/locales/index.ts +2 -2
- package/templates/mobile/src/main.ts +5 -40
- package/templates/mobile/src/views/HomeView.tsx +2 -2
- package/templates/mobile/src/views/__tests__/AboutView.spec.tsx +11 -0
- package/templates/mobile/src/views/__tests__/HomeView.spec.tsx +11 -0
- package/templates/mobile/tsconfig.json +1 -2
- package/templates/mobile/vitest.config.ts +4 -2
- package/templates/web/.gitignore.tpl +25 -24
- package/templates/web/farris.config.mjs +2 -2
- package/templates/web/mock/README.md +10 -4
- package/templates/web/package.json +4 -2
- package/templates/web/src/App.tsx +0 -4
- package/templates/web/src/locales/index.ts +2 -2
- package/templates/web/src/locales/zh-CHS.json +1 -0
- package/templates/web/src/main.ts +5 -40
- package/templates/web/src/views/HomeView.tsx +2 -2
- package/templates/web/src/views/__tests__/AboutView.spec.tsx +11 -0
- package/templates/web/src/views/__tests__/HomeView.spec.tsx +11 -0
- package/templates/web/tsconfig.json +1 -2
- package/templates/web/vitest.config.ts +4 -2
- package/templates/mobile/src/components/TheButton.tsx +0 -9
- package/templates/mobile/test/src/components/TheButton.spec.ts +0 -15
- package/templates/mobile/test/src/components/TheButton.spec.tsx +0 -15
- package/templates/web/src/components/TheButton.tsx +0 -9
- package/templates/web/src/micro-app.d.ts +0 -20
- package/templates/web/src/styles/index.css +0 -0
- package/templates/web/test/src/components/TheButton.spec.ts +0 -15
- package/templates/web/test/src/components/TheButton.spec.tsx +0 -15
- /package/templates/{mobile/src/locales/zh-CN.json → micro/src/locales/zh-CHS.json} +0 -0
- /package/templates/{web → micro}/src/micro/context.ts +0 -0
- /package/templates/{mobile → micro}/src/micro-app.d.ts +0 -0
- /package/templates/{mobile/src/styles/index.css → micro/src/styles/index.scss} +0 -0
- /package/templates/{web/src/locales/zh-CN.json → mobile/src/locales/zh-CHS.json} +0 -0
package/lib/index.js
CHANGED
|
@@ -60,20 +60,30 @@ program
|
|
|
60
60
|
.description('新建 pnpm workspace,可选创建一个工程')
|
|
61
61
|
.option('-y, --yes', '使用默认值,跳过问答')
|
|
62
62
|
.option('--json', '以 JSON 格式输出结果')
|
|
63
|
-
.option('--
|
|
64
|
-
.option('--no-
|
|
63
|
+
.option('--project <name>', '非交互时指定工程名(旧名 --app 仍可用)')
|
|
64
|
+
.option('--no-project', '不创建工程')
|
|
65
|
+
.option('--type <type>', '工程类型 (app | lib | micro)', 'app')
|
|
66
|
+
.option('--style <style>', '应用全局样式 (none | scss)', 'scss')
|
|
67
|
+
.option('--platform <platform>', '应用平台 (web | mobile)', 'web')
|
|
68
|
+
.option('--format <format>', '应用默认交付格式 (es | umd | systemjs | iife)', 'es')
|
|
69
|
+
.option('--formats <formats>', 'lib 产物格式,逗号分隔 (es,cjs,umd,systemjs)')
|
|
65
70
|
.option('--install', '生成后执行 pnpm install')
|
|
66
71
|
.option('--force', '确认覆盖与模板同名的已有文件(非交互模式必须显式指定)')
|
|
67
72
|
.action(async (name, options) => {
|
|
68
73
|
const { create } = await import('./commands/create.js');
|
|
69
|
-
const
|
|
70
|
-
const
|
|
74
|
+
const noProject = options.noProject === true || options.project === false;
|
|
75
|
+
const project = typeof options.project === 'string' ? options.project : undefined;
|
|
71
76
|
await create(name, {
|
|
72
77
|
yes: options.yes,
|
|
73
78
|
json: options.json,
|
|
74
79
|
install: options.install,
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
project,
|
|
81
|
+
noProject,
|
|
82
|
+
type: options.type,
|
|
83
|
+
style: options.style,
|
|
84
|
+
platform: options.platform,
|
|
85
|
+
format: options.format,
|
|
86
|
+
formats: options.formats,
|
|
77
87
|
force: options.force
|
|
78
88
|
});
|
|
79
89
|
});
|
|
@@ -82,7 +92,7 @@ program
|
|
|
82
92
|
.description(`向当前 workspace 添加应用 → ${PROJECT_CONTAINERS.app}/<name>`)
|
|
83
93
|
.option('-t, --title <title>', '应用展示标题')
|
|
84
94
|
.option('--platform <platform>', '应用平台 (web | mobile)', 'web')
|
|
85
|
-
.option('--style <style>', '应用全局样式 (none |
|
|
95
|
+
.option('--style <style>', '应用全局样式 (none | scss)', 'scss')
|
|
86
96
|
.option('--format <format>', '产物交付格式 (es | systemjs)', 'es')
|
|
87
97
|
.option('--json', '以 JSON 格式输出结果')
|
|
88
98
|
.option('--force', '确认覆盖与模板同名的已有文件')
|
|
@@ -103,6 +113,19 @@ program
|
|
|
103
113
|
const { addLib } = await import('./commands/add-lib.js');
|
|
104
114
|
await addLib(name, options);
|
|
105
115
|
});
|
|
116
|
+
program
|
|
117
|
+
.command('add-micro [name]')
|
|
118
|
+
.description(`向当前 workspace 添加微应用 → ${PROJECT_CONTAINERS.app}/<name>`)
|
|
119
|
+
.option('-t, --title <title>', '微应用展示标题')
|
|
120
|
+
.option('--style <style>', '应用全局样式 (none | scss)', 'scss')
|
|
121
|
+
.option('--format <format>', '产物交付格式 (iife | es | systemjs)', 'iife')
|
|
122
|
+
.option('--json', '以 JSON 格式输出结果')
|
|
123
|
+
.option('--force', '确认覆盖与模板同名的已有文件')
|
|
124
|
+
.option('--install', '添加后执行 pnpm install', false)
|
|
125
|
+
.action(async (name, options) => {
|
|
126
|
+
const { addMicro } = await import('./commands/add-micro.js');
|
|
127
|
+
await addMicro(name, options);
|
|
128
|
+
});
|
|
106
129
|
program
|
|
107
130
|
.command('create-app [name]')
|
|
108
131
|
.description('新建 App / Lib 模板')
|
|
@@ -163,7 +186,7 @@ workspaceCmd
|
|
|
163
186
|
.option('--router', '启用 Vue Router')
|
|
164
187
|
.option('--router-mode <mode>', '路由模式 (hash | history)', 'hash')
|
|
165
188
|
.option('--format <format>', '产物交付格式 (iife | es | systemjs)', 'iife')
|
|
166
|
-
.option('--style <style>', '应用全局样式 (none |
|
|
189
|
+
.option('--style <style>', '应用全局样式 (none | scss)', 'scss')
|
|
167
190
|
.option('--json', '以 JSON 格式输出结果')
|
|
168
191
|
.option('--force', '确认覆盖与模板同名的已有文件(非交互模式必须显式指定)')
|
|
169
192
|
.option('--install', '是否在初始化完成后自动安装依赖 (pnpm install)', false)
|
|
@@ -179,7 +202,7 @@ workspaceCmd
|
|
|
179
202
|
.option('--router', '启用 Vue Router')
|
|
180
203
|
.option('--router-mode <mode>', '路由模式 (hash | history)', 'hash')
|
|
181
204
|
.option('--format <format>', '产物交付格式 (iife | es | systemjs)', 'iife')
|
|
182
|
-
.option('--style <style>', '应用全局样式 (none |
|
|
205
|
+
.option('--style <style>', '应用全局样式 (none | scss)', 'scss')
|
|
183
206
|
.option('--json', '以 JSON 格式输出结果')
|
|
184
207
|
.action(async (name, options) => {
|
|
185
208
|
const { addAppToWorkspace } = await import('./commands/workspace/add-app.js');
|
|
@@ -210,7 +233,7 @@ generateCmd
|
|
|
210
233
|
});
|
|
211
234
|
generateCmd
|
|
212
235
|
.command('component <name>')
|
|
213
|
-
.description('
|
|
236
|
+
.description('生成通用组件(按需创建 src/components/)')
|
|
214
237
|
.option('--with-props', '生成组件 Props 文件')
|
|
215
238
|
.option('--no-props', '不生成组件 Props 文件')
|
|
216
239
|
.option('--style <style>', '组件样式方案 (none | css | scss)', 'none')
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
dist
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
# 依赖与产物
|
|
2
|
+
node_modules/
|
|
3
|
+
dist/
|
|
4
|
+
dist-es/
|
|
5
|
+
dist-ssr/
|
|
6
|
+
coverage/
|
|
7
|
+
*.tsbuildinfo
|
|
8
|
+
.pnpm-store/
|
|
9
|
+
|
|
10
|
+
# 日志与本地文件
|
|
11
|
+
*.log
|
|
6
12
|
.DS_Store
|
|
7
13
|
*.local
|
|
14
|
+
.env
|
|
15
|
+
.env.*
|
|
16
|
+
!.env.example
|
|
17
|
+
package-lock.json
|
|
18
|
+
|
|
19
|
+
# 编辑器
|
|
8
20
|
.vscode/*
|
|
9
21
|
!.vscode/extensions.json
|
|
10
22
|
!.vscode/settings.json
|
|
11
|
-
.idea
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
.idea/
|
|
24
|
+
.history
|
|
25
|
+
*.sw?
|
|
26
|
+
|
|
27
|
+
# AI 工具
|
|
28
|
+
.codebuddy/
|
|
29
|
+
.cursor/
|
|
30
|
+
.claude/
|
|
31
|
+
.windsurf/
|
|
32
|
+
.trae/
|
|
33
|
+
.opencode/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# <%= title %> — AI 协作契约
|
|
2
2
|
|
|
3
|
-
本文件是本 workspace
|
|
3
|
+
本文件是本 workspace 的 **唯一真源**:所有 AI 协作约定都写在这里。
|
|
4
|
+
根目录 `CLAUDE.md` 只是指向本文件的一行指针;**子工程内不得新增任何 AI 配置文件**(`AGENTS.md`、`CLAUDE.md`、`.cursorrules`、`.windsurfrules` 等),公共约定一律写在本文件里。
|
|
4
5
|
|
|
5
6
|
## 项目速览
|
|
6
7
|
|
|
@@ -12,76 +13,105 @@
|
|
|
12
13
|
|
|
13
14
|
## 2. 全局契约
|
|
14
15
|
|
|
15
|
-
###
|
|
16
|
+
### 2.1 必须遵守
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
| 规则 | 具体做法 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| 改完代码先跑测试 | 在**工程目录内** `pnpm test`;提交前在根目录跑一次 `pnpm test`(递归全部工程) |
|
|
21
|
+
| 改结构 / 根脚本 / 容器 / 增删工程 | 先 `pnpm verify`,不通过先修复再提交 |
|
|
22
|
+
| 依赖版本只有一个来源 | 子工程里属于 catalog 的依赖一律写 `"catalog:"`;禁止手工 `npm install` 单个子包;禁止手改 `catalog` 版本与 `packages` glob |
|
|
23
|
+
| 不许为了"变绿"动测试设施 | 禁止改 `vitest.config.ts` 的 `include` / `exclude` / `environment`,禁止删改既有用例 |
|
|
24
|
+
| AI 配置只放 workspace 根 | 见文首:子工程内不放任何 AI 配置文件 |
|
|
25
|
+
| 长驻命令在工程目录内执行 | 根目录**没有** `dev` / `preview`(有意为之):`cd <工程目录>` 后再 `pnpm dev` |
|
|
18
26
|
|
|
19
|
-
###
|
|
27
|
+
### 2.2 目录与落点
|
|
20
28
|
|
|
21
|
-
| 目录 |
|
|
29
|
+
| 目录 | 放什么 | 怎么出现 |
|
|
22
30
|
|---|---|---|
|
|
23
|
-
| `<%= appContainer %>/` |
|
|
24
|
-
| `<%= libContainer %>/` |
|
|
25
|
-
|
|
26
|
-
两类容器目录按需生成:只有存在对应类型的工程时才出现(首次 `add-app` / `add-lib` 时自动补建),不用空目录占位。
|
|
31
|
+
| `<%= appContainer %>/` | 应用、微应用(可部署) | `add-app` / `add-micro` 按需创建 |
|
|
32
|
+
| `<%= libContainer %>/` | 组件库(可发布) | `add-lib` 按需创建 |
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
- 微应用与普通应用**同在 `<%= appContainer %>/` 容器**,靠工程 `package.json` 的 `"farris": { "type": "micro" }` 区分;**不存在** `micro/` 容器。
|
|
35
|
+
- 容器按需出现,不用空目录占位;工程目录名即包名来源。
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|---|---|
|
|
32
|
-
| `npm create farris [name]` / `farris-cli create [name]` | 新建 workspace(可同时创建一个工程) |
|
|
33
|
-
| `farris-cli add-app <name>` | 添加应用 |
|
|
34
|
-
| `farris-cli add-lib <name>` | 添加组件库 |
|
|
35
|
-
| `farris-cli create-app [name]` | 在当前位置就地创建独立工程(不要用于 workspace 内) |
|
|
36
|
-
| `farris-cli workspace create [target]` | `create` 的适配器(参数与行为一致) |
|
|
37
|
-
| `farris-cli workspace verify` | 校验 workspace 规范 |
|
|
37
|
+
### 2.3 命令
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
<%= commandTable %>
|
|
40
40
|
|
|
41
|
-
###
|
|
41
|
+
### 2.4 产物与交付
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
| 工程类型 | 默认构建 | 产物目录 |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| 应用 | `pnpm build` → `es` + `umd` + `systemjs` | `dist/`、`dist-umd/`、`dist-systemjs/` |
|
|
46
|
+
| 微应用 | `pnpm build` → `iife` 单文件 | `dist/` |
|
|
47
|
+
| 组件库 | `pnpm build` → 一次构建出全部格式 | `dist/` |
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
- **产物目录一律是 `dist/` 系列**(组件库的发布清单 `files` 也是 `dist`);不要再写 `lib/` 之类旧目录。
|
|
50
|
+
- 只出某一种格式:工程目录内 `pnpm build:es`(应用另有 `pnpm build:umd` / `pnpm build:systemjs`)。
|
|
51
|
+
- 微应用交付 `iife` 单文件是 IBP 契约;普通应用**不默认**产出 `iife`,需要时显式执行 `farris-cli build --format iife`。
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
- 禁止手工 `npm install` 单个子包;禁止手改 `pnpm-workspace.yaml` 的 `packages` glob 或 `catalog` 版本。
|
|
49
|
-
- 除 `verify` / `add-app` / `add-lib` 是 CLI 转发外,其余根脚本一律 `pnpm --recursive --if-present run <script>`。**根目录没有 `dev` / `preview` 是有意为之**:长驻服务不递归执行,避免多工程抢端口、日志交织。
|
|
53
|
+
### 2.5 数据来源与 Mock
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
- 开发期接口数据来自工程内 `mock/` 目录(写法与行为见该目录 README);未命中的请求按 `farris.config.mjs` 的 `proxy` 转发。
|
|
56
|
+
- 联调真实后端:在**工程目录内**执行 `pnpm dev --no-mock`,业务代码不改。
|
|
57
|
+
- 请求路径必须与 mock 的 `url` 逐字一致;禁止在组件里散落假数据;`mock/` 不得进入构建产物。
|
|
52
58
|
|
|
53
|
-
|
|
54
|
-
- 请求路径必须与 mock 的 url 逐字一致;禁止在组件内散落假数据;mock 不得进入构建产物。
|
|
59
|
+
### 2.6 工程内生成器
|
|
55
60
|
|
|
56
|
-
|
|
61
|
+
| 命令 | 作用 | 关键参数 |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `farris-cli generate view <name>` | 生成页面 | `--with-route` 自动注册路由;`--with-props` 生成 Props |
|
|
64
|
+
| `farris-cli generate component <name>` | 生成组件到 `<工程>/src/components/<name>/` | `--with-props`;`--style none\|css\|scss`(默认 `none`) |
|
|
65
|
+
| `farris-cli generate api <name> -e /api/v1/orders` | 生成 `src/api/` 接口模块 | `-m get` 指定方法 |
|
|
57
66
|
|
|
58
|
-
- `
|
|
59
|
-
- `farris-cli generate component <name> [--style none|css|scss]`:生成 `src/components/` 通用组件。
|
|
60
|
-
- `farris-cli generate api <name> -e /api/v1/orders [-m get]`:生成 `src/api/` 接口模块。
|
|
61
|
-
- 路由注册依赖 `src/router/index.ts`(或 `src/router/routes.ts`)中的 `routes = [...]` 赋值形式数组;自己重写 router 必须保留该形式,否则 `--with-route` 不会生效。
|
|
67
|
+
- `--with-route` 依赖 `src/router/index.ts`(或 `src/router/routes.ts`)里的 `routes = [...]` 赋值形式;自己重写 router 必须保留该写法,否则不生效。
|
|
62
68
|
|
|
63
69
|
## 3. 工程类型差异速查表
|
|
64
70
|
|
|
65
|
-
| 关注点 | 应用 `<%= appContainer %>/<name>` | 组件库 `<%= libContainer %>/<name>` |
|
|
66
|
-
|
|
67
|
-
| 源码位置 | `src/` | `components/` 是**发布物唯一入口**;`src/` 仅供本地演示 |
|
|
68
|
-
| 构建 | `
|
|
69
|
-
| 产物 | `dist/` | `
|
|
70
|
-
|
|
|
71
|
-
|
|
|
71
|
+
| 关注点 | 应用 `<%= appContainer %>/<name>` | 微应用 `<%= appContainer %>/<name>`(`farris.type: micro`) | 组件库 `<%= libContainer %>/<name>` |
|
|
72
|
+
|---|---|---|---|
|
|
73
|
+
| 源码位置 | `src/` | `src/` | `components/` 是**发布物唯一入口**;`src/` 仅供本地演示 |
|
|
74
|
+
| 构建 | `pnpm build` | `pnpm build`(`iife` 单文件) | `pnpm build`(`farris-cli build-lib -ep` + `farris-cli build-components`) |
|
|
75
|
+
| 产物 | `dist/`、`dist-umd/`、`dist-systemjs/` | `dist/` | `dist/` |
|
|
76
|
+
| 宿主契约 | **不暴露** | 暴露 `window.mount` / `window.unmount`,并处理宿主下发的 `initialPath` 深链 | —— |
|
|
77
|
+
| 发版 | 不单独发版(`private: true`) | 不单独发版(`private: true`) | `pnpm changeset` |
|
|
78
|
+
| 测试 | 就近 `__tests__/` | 就近 `__tests__/` | 就近 `__tests__/`(贴 `components/` 或 `src/` 下被测文件) |
|
|
72
79
|
|
|
73
|
-
|
|
80
|
+
**两个高频陷阱:**
|
|
81
|
+
|
|
82
|
+
1. 组件写进组件库的 `src/` 等于「写了但发不出去」——`farris-cli build-components` 只扫 `components/`。
|
|
83
|
+
2. 普通应用**没有**宿主契约:不要往应用里加 `window.mount` / `__MICRO_APP_ENVIRONMENT__`,也不会生成 `src/micro/`、`src/micro-app.d.ts`;需要微前端能力就用 `farris-cli add-micro <name>` 新建微应用。
|
|
74
84
|
|
|
75
85
|
## 4. 测试约定
|
|
76
86
|
|
|
77
|
-
|
|
87
|
+
### 4.1 放哪儿(就近:与被测文件同级)
|
|
78
88
|
|
|
79
89
|
```text
|
|
80
|
-
<%=
|
|
81
|
-
→ <%=
|
|
90
|
+
<%= appContainer %>/shop/src/components/button/button.component.tsx
|
|
91
|
+
→ <%= appContainer %>/shop/src/components/button/__tests__/button.spec.tsx
|
|
92
|
+
|
|
93
|
+
<%= libContainer %>/ui-kit/components/button/button.component.tsx
|
|
94
|
+
→ <%= libContainer %>/ui-kit/components/button/__tests__/button.spec.tsx
|
|
82
95
|
```
|
|
83
96
|
|
|
84
|
-
|
|
97
|
+
- 文件名 = 被测文件名 + `.spec`:纯逻辑用 `*.spec.ts`,组件或含 JSX 用 `*.spec.tsx`。
|
|
98
|
+
- `__tests__/` 与被测文件同级;**不要**在工程根另建 `test/` 汇总目录。
|
|
99
|
+
- 工程里**不预置**端到端测试:需要时自行引入,别与上面的单元测试混放。
|
|
100
|
+
|
|
101
|
+
### 4.2 每次改动必须做
|
|
102
|
+
|
|
103
|
+
1. 改完代码先在**工程目录内**跑 `pnpm test`;提交前在根目录跑一次 `pnpm test`(递归全部工程)。
|
|
104
|
+
2. 新增或修改组件、工具函数、mock 解析逻辑:**同一提交内**补上或更新对应 `.spec`。
|
|
105
|
+
3. 修 bug:先在 `.spec` 里写一条能复现的失败用例,再改实现(先红后绿)。
|
|
106
|
+
4. 用例必须能在 `jsdom` 下独立通过:不依赖真实浏览器、不访问外网、不依赖执行顺序。
|
|
107
|
+
|
|
108
|
+
### 4.3 禁止
|
|
109
|
+
|
|
110
|
+
- 禁止为让测试通过而改 `vitest.config.ts` 的 `include` / `exclude` / `environment`,或删改既有用例。
|
|
111
|
+
- 禁止把端到端用例放进 `__tests__/`;禁止提交 `.only` / `.skip`。
|
|
112
|
+
- 禁止在用例里靠固定 `sleep` 等待,或依赖上一条用例残留的状态。
|
|
113
|
+
|
|
114
|
+
工程内 `pnpm test` 只跑本工程;根目录 `pnpm test` 递归跑全部工程。
|
|
85
115
|
|
|
86
116
|
## 5. 子工程清单
|
|
87
117
|
|
|
@@ -2,23 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
<%= readmeBody %>
|
|
4
4
|
|
|
5
|
+
本 workspace 用 pnpm 管理:根目录只放 workspace 级命令,工程内的开发 / 构建命令进工程目录执行。
|
|
6
|
+
|
|
7
|
+
## 快速上手
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm install # 安装依赖(版本由 pnpm-workspace.yaml 的 catalog 统一提供)
|
|
11
|
+
pnpm build # 构建全部工程(默认产出全部格式)
|
|
12
|
+
pnpm test # 跑全部工程的单元测试
|
|
13
|
+
pnpm verify # 校验 workspace 规范(改结构 / 脚本 / 容器后必跑)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
开发某个工程时,进入它的目录:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
cd <%= appContainer %>/shop # 以应用为例:工程内的命令都在这里执行
|
|
20
|
+
pnpm dev # 启动开发服务器(根目录没有 dev,是有意为之)
|
|
21
|
+
```
|
|
22
|
+
|
|
5
23
|
## 目录结构
|
|
6
24
|
|
|
7
25
|
```text
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
26
|
+
<%= appContainer %>/ # 应用与微应用(可部署)
|
|
27
|
+
<%= libContainer %>/ # 组件库(可发布)
|
|
28
|
+
AGENTS.md # AI 协作约定(唯一真源)
|
|
29
|
+
CLAUDE.md # 指向 AGENTS.md 的一行指针
|
|
30
|
+
pnpm-workspace.yaml # workspace 配置与 catalog 依赖版本
|
|
31
|
+
package.json # 根脚本
|
|
13
32
|
```
|
|
14
33
|
|
|
15
|
-
|
|
34
|
+
容器目录按需出现:只有真正存在对应类型的工程时才生成,不用空目录占位。
|
|
35
|
+
微应用与普通应用同住 `<%= appContainer %>/`,靠工程 `package.json` 的 `"farris": { "type": "micro" }` 区分。
|
|
16
36
|
|
|
17
|
-
##
|
|
37
|
+
## 交付物在哪
|
|
38
|
+
|
|
39
|
+
每个工程的产物都在自己的 `dist/` 系列目录里,组件库的发布清单(`files`)同样只指向 `dist`:
|
|
40
|
+
|
|
41
|
+
| 工程类型 | 产物目录 |
|
|
42
|
+
|---|---|
|
|
43
|
+
| 应用 | `dist/`、`dist-umd/`、`dist-systemjs/` |
|
|
44
|
+
| 微应用 | `dist/`(`iife` 单文件) |
|
|
45
|
+
| 组件库 | `dist/`(一次构建出全部格式) |
|
|
46
|
+
|
|
47
|
+
## 增删工程
|
|
18
48
|
|
|
19
49
|
```bash
|
|
20
|
-
pnpm
|
|
21
|
-
pnpm
|
|
22
|
-
pnpm
|
|
23
|
-
pnpm verify
|
|
50
|
+
pnpm add-app shop # 新增应用 → <%= appContainer %>/shop
|
|
51
|
+
pnpm add-lib ui-kit # 新增组件库 → <%= libContainer %>/ui-kit
|
|
52
|
+
pnpm add-micro portal # 新增微应用 → <%= appContainer %>/portal
|
|
24
53
|
```
|
|
54
|
+
|
|
55
|
+
生成页面 / 组件 / 接口模块,在**工程目录内**执行 `farris-cli generate view|component|api <name>`。
|
|
56
|
+
|
|
57
|
+
完整的命令表、测试约定、Mock 规则与工程类型差异,见 `AGENTS.md`。
|
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
# 依赖与产物
|
|
1
2
|
node_modules/
|
|
2
|
-
|
|
3
|
+
dist/
|
|
4
|
+
dist-es/
|
|
5
|
+
dist-ssr/
|
|
6
|
+
coverage/
|
|
7
|
+
*.tsbuildinfo
|
|
8
|
+
.pnpm-store/
|
|
9
|
+
|
|
10
|
+
# 日志与本地文件
|
|
11
|
+
*.log
|
|
12
|
+
.DS_Store
|
|
13
|
+
*.local
|
|
14
|
+
.env
|
|
15
|
+
.env.*
|
|
16
|
+
!.env.example
|
|
3
17
|
package-lock.json
|
|
18
|
+
|
|
19
|
+
# 编辑器
|
|
20
|
+
.vscode/*
|
|
21
|
+
!.vscode/extensions.json
|
|
22
|
+
!.vscode/settings.json
|
|
23
|
+
.idea/
|
|
24
|
+
.history
|
|
25
|
+
*.sw?
|
|
26
|
+
|
|
27
|
+
# AI 工具
|
|
28
|
+
.codebuddy/
|
|
29
|
+
.cursor/
|
|
30
|
+
.claude/
|
|
31
|
+
.windsurf/
|
|
32
|
+
.trae/
|
|
33
|
+
.opencode/
|
|
@@ -33,7 +33,7 @@ build-job:
|
|
|
33
33
|
expire_in: '5days'
|
|
34
34
|
name: 'dist'
|
|
35
35
|
paths:
|
|
36
|
-
- $CI_PROJECT_DIR/
|
|
36
|
+
- $CI_PROJECT_DIR/dist
|
|
37
37
|
|
|
38
38
|
publish-one:
|
|
39
39
|
stage: publish
|
|
@@ -59,4 +59,4 @@ publish-one:
|
|
|
59
59
|
- npm config fix
|
|
60
60
|
script:
|
|
61
61
|
- npm config set //repos.iec.io/repository/npm-igix-release/:_auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64)
|
|
62
|
-
- cd
|
|
62
|
+
- cd dist && npm publish
|
package/templates/lib/README.md
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
1
|
# <%= name %>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Farris 组件库:`components/` 是**发布物唯一入口**,`src/` 只用于本地演示。
|
|
4
|
+
|
|
5
|
+
## 常用命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm dev # 启动本地演示(自动加载 components/**/*.scss,无需改 src/main.ts)
|
|
9
|
+
pnpm test # 跑单元测试(用例就近放在被测文件同级的 __tests__/)
|
|
10
|
+
pnpm build # 构建交付物 → dist/
|
|
11
|
+
pnpm changeset # 记一条变更;发版执行 pnpm version
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 目录职责
|
|
15
|
+
|
|
16
|
+
| 目录 | 作用 |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `components/` | 发布到 npm 的组件源码(唯一入口)——只有写在这里才会被打包 |
|
|
19
|
+
| `components/**/__tests__/` | 组件测试,与被测文件同级 |
|
|
20
|
+
| `src/` | 本地演示应用(`pnpm dev` 的入口),不参与发布 |
|
|
21
|
+
| `dist/` | 构建产物;`package.json` 的 `files` 只发布它 |
|
|
22
|
+
|
|
23
|
+
## 高频陷阱
|
|
24
|
+
|
|
25
|
+
- 组件写在 `src/` 下等于「写了但发不出去」:`farris-cli build-components` 只扫 `components/`。
|
|
26
|
+
- 改完组件记得在 `__tests__/` 补用例,并在提交前跑 `pnpm test`。
|
|
@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest';
|
|
|
2
2
|
|
|
3
3
|
describe('component library entry', () => {
|
|
4
4
|
it('provides an empty publish entry', async () => {
|
|
5
|
-
const entry = await import('../
|
|
5
|
+
const entry = await import('../index');
|
|
6
6
|
|
|
7
7
|
expect(entry).toBeDefined();
|
|
8
8
|
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
2
|
|
|
3
3
|
describe('component library entry (tsx collection)', () => {
|
|
4
|
-
it('is collected by the
|
|
5
|
-
const entry = await import('../
|
|
4
|
+
it('is collected by the default vitest include', async () => {
|
|
5
|
+
const entry = await import('../index');
|
|
6
6
|
|
|
7
7
|
expect(entry).toBeDefined();
|
|
8
8
|
});
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import vue from '@vitejs/plugin-vue';
|
|
2
|
-
import { defineConfig } from 'vitest/config';
|
|
2
|
+
import { configDefaults, defineConfig } from 'vitest/config';
|
|
3
3
|
|
|
4
4
|
export default defineConfig({
|
|
5
5
|
plugins: [vue()],
|
|
6
6
|
test: {
|
|
7
7
|
environment: 'jsdom',
|
|
8
|
-
|
|
8
|
+
// 官方默认收集范围(**/*.{test,spec}.*),源码旁的测试才会被收集
|
|
9
|
+
include: [...configDefaults.include],
|
|
10
|
+
exclude: [...configDefaults.exclude, '**/__sandbox_*/**']
|
|
9
11
|
}
|
|
10
12
|
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* eslint-env node */
|
|
2
|
+
require('@rushstack/eslint-patch/modern-module-resolution');
|
|
3
|
+
|
|
4
|
+
module.exports = {
|
|
5
|
+
root: true,
|
|
6
|
+
'extends': [
|
|
7
|
+
'plugin:vue/vue3-essential',
|
|
8
|
+
'eslint:recommended',
|
|
9
|
+
'@vue/eslint-config-typescript',
|
|
10
|
+
'@vue/eslint-config-prettier/skip-formatting'
|
|
11
|
+
],
|
|
12
|
+
parserOptions: {
|
|
13
|
+
ecmaVersion: 'latest'
|
|
14
|
+
}
|
|
15
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 依赖与产物
|
|
2
|
+
node_modules/
|
|
3
|
+
dist/
|
|
4
|
+
dist-es/
|
|
5
|
+
dist-ssr/
|
|
6
|
+
coverage/
|
|
7
|
+
*.tsbuildinfo
|
|
8
|
+
.pnpm-store/
|
|
9
|
+
|
|
10
|
+
# 日志与本地文件
|
|
11
|
+
*.log
|
|
12
|
+
.DS_Store
|
|
13
|
+
*.local
|
|
14
|
+
.env
|
|
15
|
+
.env.*
|
|
16
|
+
!.env.example
|
|
17
|
+
package-lock.json
|
|
18
|
+
|
|
19
|
+
# 编辑器
|
|
20
|
+
.vscode/*
|
|
21
|
+
!.vscode/extensions.json
|
|
22
|
+
!.vscode/settings.json
|
|
23
|
+
.idea/
|
|
24
|
+
.history
|
|
25
|
+
*.sw?
|
|
26
|
+
|
|
27
|
+
# AI 工具
|
|
28
|
+
.codebuddy/
|
|
29
|
+
.cursor/
|
|
30
|
+
.claude/
|
|
31
|
+
.windsurf/
|
|
32
|
+
.trae/
|
|
33
|
+
.opencode/
|