@farris/cli 2.0.2 → 2.1.0

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.
Files changed (52) hide show
  1. package/lib/commands/build.js +6 -7
  2. package/lib/commands/build.js.map +1 -1
  3. package/lib/commands/generate/api.js +188 -0
  4. package/lib/commands/generate/api.js.map +1 -0
  5. package/lib/commands/generate/common.js +101 -0
  6. package/lib/commands/generate/common.js.map +1 -0
  7. package/lib/commands/generate/component.js +163 -0
  8. package/lib/commands/generate/component.js.map +1 -0
  9. package/lib/commands/generate/view.js +195 -0
  10. package/lib/commands/generate/view.js.map +1 -0
  11. package/lib/commands/workspace/add-app.js +170 -0
  12. package/lib/commands/workspace/add-app.js.map +1 -0
  13. package/lib/commands/workspace/create.js +310 -0
  14. package/lib/commands/workspace/create.js.map +1 -0
  15. package/lib/commands/workspace/inspect.js +31 -0
  16. package/lib/commands/workspace/inspect.js.map +1 -0
  17. package/lib/commands/workspace/verify.js +39 -0
  18. package/lib/commands/workspace/verify.js.map +1 -0
  19. package/lib/common/constant.js +42 -1
  20. package/lib/common/constant.js.map +1 -1
  21. package/lib/common/get-vite-config.js +66 -9
  22. package/lib/common/get-vite-config.js.map +1 -1
  23. package/lib/common/output.js +93 -0
  24. package/lib/common/output.js.map +1 -0
  25. package/lib/common/safety.js +172 -0
  26. package/lib/common/safety.js.map +1 -0
  27. package/lib/common/template-renderer.js +113 -0
  28. package/lib/common/template-renderer.js.map +1 -0
  29. package/lib/common/transaction.js +84 -0
  30. package/lib/common/transaction.js.map +1 -0
  31. package/lib/common/verifier.js +147 -0
  32. package/lib/common/verifier.js.map +1 -0
  33. package/lib/config/vite-common.js +1 -1
  34. package/lib/config/vite-common.js.map +1 -1
  35. package/lib/index.js +124 -30
  36. package/lib/index.js.map +1 -1
  37. package/package.json +14 -10
  38. package/templates/workspace/app/farris.config.mjs +13 -0
  39. package/templates/workspace/app/index.html +12 -0
  40. package/templates/workspace/app/package.json +22 -0
  41. package/templates/workspace/app/src/App.tsx +11 -0
  42. package/templates/workspace/app/src/main.ts +11 -0
  43. package/templates/workspace/app/src/router/index.ts +16 -0
  44. package/templates/workspace/app/src/styles/index.css +0 -0
  45. package/templates/workspace/app/src/styles/index.scss +0 -0
  46. package/templates/workspace/app/src/views/home/composables/use-home.ts +7 -0
  47. package/templates/workspace/app/src/views/home/home.component.tsx +15 -0
  48. package/templates/workspace/app/src/views/home/index.ts +4 -0
  49. package/templates/workspace/app/tsconfig.json +21 -0
  50. package/templates/workspace/root/README.md +28 -0
  51. package/templates/workspace/root/package.json +13 -0
  52. package/templates/workspace/root/pnpm-workspace.yaml +12 -0
package/lib/index.js CHANGED
@@ -1,84 +1,178 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
- import { getVersion } from "./common/get-version.js";
3
+ import { getVersion } from './common/get-version.js';
4
4
  const program = new Command();
5
5
  program.version(`@farris/cli ${getVersion()}`);
6
+ // ==========================================
7
+ // 存量命令 (保持向后兼容)
8
+ // ==========================================
6
9
  program
7
10
  .command('build')
8
- .description('构建')
9
- .option('-c --configFile [configFile]', 'config file path')
10
- .option('-vc --viteConfigFile [viteConfigFile]', 'vite config file path')
11
+ .description('构建应用产物')
12
+ .option('-c, --configFile [configFile]', 'Farris 配置文件路径')
13
+ .option('-vc, --viteConfigFile [viteConfigFile]', 'Vite 配置文件路径')
14
+ .option('-b, --base [base]', '覆盖构建公共路径 Base (如 / 或 ./ 或 /apps/xxx/)')
11
15
  .action(async (options) => {
12
16
  process.env.BUILD_TYPE = 'app';
13
17
  const { buildCommon } = await import('./commands/build.js');
14
- buildCommon(options);
18
+ await buildCommon(options);
15
19
  });
16
20
  program
17
21
  .command('build-lib')
18
- .description('构建')
19
- .option('-c --configFile [configFile]', 'config file path')
20
- .option('-vc --viteConfigFile [viteConfigFile]', 'vite config file path')
21
- .option('-f --format [format]', 'lib format')
22
- .option('-d --dts', 'dts')
23
- .option('-ep --emitPackage', 'createPackage')
22
+ .description('构建 Library 产物')
23
+ .option('-c, --configFile [configFile]', 'Farris 配置文件路径')
24
+ .option('-vc, --viteConfigFile [viteConfigFile]', 'Vite 配置文件路径')
25
+ .option('-f, --format [format]', '产物格式 (es | umd | systemjs)')
26
+ .option('-d, --dts', '是否生成类型声明文件')
27
+ .option('-ep, --emitPackage', '是否生成 package.json')
24
28
  .action(async (options) => {
25
29
  process.env.BUILD_TYPE = 'lib';
26
30
  const { buildLib } = await import('./commands/build-lib.js');
27
- return buildLib(options);
31
+ await buildLib(options);
28
32
  });
29
33
  program
30
34
  .command('build-components')
31
- .description('构建')
32
- .option('-c --configFile [configFile]', 'config file path')
33
- .option('-vc --viteConfigFile [viteConfigFile]', 'vite config file path')
35
+ .description('构建组件库产物')
36
+ .option('-c, --configFile [configFile]', 'Farris 配置文件路径')
37
+ .option('-vc, --viteConfigFile [viteConfigFile]', 'Vite 配置文件路径')
34
38
  .action(async (options) => {
35
39
  process.env.BUILD_TYPE = 'components';
36
40
  const { buildComponents } = await import('./commands/build-components.js');
37
- return buildComponents(options);
41
+ await buildComponents(options);
38
42
  });
39
43
  program
40
44
  .command('build-css')
41
- .description('构建')
42
- .option('-e --entry [entry]', 'entry file')
43
- .option('-o --outfile [outfile]', 'outfile')
44
- .option('-m --minify [minify]', 'minify')
45
+ .description('构建样式产物')
46
+ .option('-e, --entry [entry]', '样式入口文件')
47
+ .option('-o, --outfile [outfile]', '样式输出文件')
48
+ .option('-m, --minify [minify]', '是否压缩')
45
49
  .action(async (options) => {
46
50
  process.env.BUILD_TYPE = 'css';
47
51
  const { buildCss } = await import('./commands/build-css.js');
48
- return buildCss(options);
52
+ await buildCss(options);
49
53
  });
50
54
  program
51
55
  .command('create-app')
52
- .description('新建 App 模板')
56
+ .description('新建 App 模板 (旧版单体模板向后兼容)')
53
57
  .action(async () => {
54
58
  const { createApp } = await import('./commands/create-app.js');
55
- return createApp();
59
+ await createApp();
56
60
  });
57
61
  program
58
62
  .command('dev')
59
63
  .description('创建 Dev Server')
60
- .option('-p --port [port]', 'Server Port')
64
+ .option('-p, --port [port]', '开发服务器端口')
61
65
  .action(async (options) => {
62
66
  process.env.BUILD_TYPE = 'app';
63
67
  const { devServe } = await import('./commands/dev-serve.js');
64
- return devServe(options);
68
+ await devServe(options);
65
69
  });
66
70
  program
67
71
  .command('preview')
68
72
  .description('创建 Preview Server')
69
- .option('-p --port [port]', 'Server Port')
73
+ .option('-p, --port [port]', '预览服务器端口')
70
74
  .action(async (options) => {
71
75
  process.env.BUILD_TYPE = 'app';
72
76
  const { previewServe } = await import('./commands/preview-serve.js');
73
- return previewServe(options);
77
+ await previewServe(options);
74
78
  });
75
79
  program
76
80
  .command('extract-i18n')
77
- .description('抽取国际化资源到JSON文件')
78
- .option('-c --configFile [configFile]', 'config file path')
81
+ .description('抽取国际化资源到 JSON 文件')
82
+ .option('-c, --configFile [configFile]', '国际化配置文件路径')
79
83
  .action(async (options) => {
80
84
  const { extractI18n } = await import('./commands/extract-i18n.js');
81
- return extractI18n(options);
85
+ await extractI18n(options);
86
+ });
87
+ // ==========================================
88
+ // Workspace 命令组
89
+ // ==========================================
90
+ const workspaceCmd = program.command('workspace').description('Farris pnpm workspace 规范管理');
91
+ workspaceCmd
92
+ .command('inspect [target]')
93
+ .description('检查目标目录安全状态')
94
+ .option('--json', '以 JSON 格式输出结果')
95
+ .action(async (target = '.', options) => {
96
+ const { inspectWorkspace } = await import('./commands/workspace/inspect.js');
97
+ await inspectWorkspace(target, options);
98
+ });
99
+ workspaceCmd
100
+ .command('create [target]')
101
+ .description('初始化标准 Farris Vue pnpm workspace')
102
+ .option('-n, --name <name>', '应用名称 (package name)')
103
+ .option('-t, --title <title>', '应用展示标题')
104
+ .option('--app-dir <dir>', '子应用目录名 (默认从 name 推导)')
105
+ .option('--router', '启用 Vue Router')
106
+ .option('--router-mode <mode>', '路由模式 (hash | history)', 'hash')
107
+ .option('--format <format>', '产物交付格式 (es | systemjs)', 'es')
108
+ .option('--style <style>', '应用全局样式 (none | css | scss)', 'css')
109
+ .option('--json', '以 JSON 格式输出结果')
110
+ .option('--force', '确认覆盖与模板同名的已有文件(非交互模式必须显式指定)')
111
+ .option('--no-install', '不自动安装依赖', true)
112
+ .option('-y, --yes', '接受默认配置')
113
+ .action(async (target = '.', options) => {
114
+ const { createWorkspace } = await import('./commands/workspace/create.js');
115
+ await createWorkspace(target, options);
116
+ });
117
+ workspaceCmd
118
+ .command('add-app <name>')
119
+ .description('在现有 Workspace 中添加新应用')
120
+ .option('-t, --title <title>', '应用展示标题')
121
+ .option('--app-dir <dir>', '子应用目录名 (默认从 name 推导)')
122
+ .option('--router', '启用 Vue Router')
123
+ .option('--router-mode <mode>', '路由模式 (hash | history)', 'hash')
124
+ .option('--format <format>', '产物交付格式 (es | systemjs)', 'es')
125
+ .option('--style <style>', '应用全局样式 (none | css | scss)', 'css')
126
+ .option('--json', '以 JSON 格式输出结果')
127
+ .action(async (name, options) => {
128
+ const { addAppToWorkspace } = await import('./commands/workspace/add-app.js');
129
+ await addAppToWorkspace(name, options);
130
+ });
131
+ workspaceCmd
132
+ .command('verify [target]')
133
+ .description('验证 Workspace 结构与规范合规性')
134
+ .option('--json', '以 JSON 格式输出结果')
135
+ .action(async (target = '.', options) => {
136
+ const { verifyWorkspaceCommand } = await import('./commands/workspace/verify.js');
137
+ await verifyWorkspaceCommand(target, options);
138
+ });
139
+ // ==========================================
140
+ // Generate 命令组
141
+ // ==========================================
142
+ const generateCmd = program.command('generate').alias('g').description('应用级代码生成器');
143
+ generateCmd
144
+ .command('view <name>')
145
+ .description('生成 View 页面 (含必须调用的 composable)')
146
+ .option('-t, --title <title>', '页面展示标题')
147
+ .option('--with-route', '自动在路由中注册页面')
148
+ .option('--with-props', '生成页面 Props 文件')
149
+ .option('--json', '以 JSON 格式输出结果')
150
+ .action(async (name, options) => {
151
+ const { generateView } = await import('./commands/generate/view.js');
152
+ await generateView(name, options);
153
+ });
154
+ generateCmd
155
+ .command('component <name>')
156
+ .description('生成通用组件 (位于 src/components/)')
157
+ .option('--with-props', '生成组件 Props 文件')
158
+ .option('--no-props', '不生成组件 Props 文件')
159
+ .option('--style <style>', '组件样式方案 (none | css | scss)', 'none')
160
+ .option('--json', '以 JSON 格式输出结果')
161
+ .action(async (name, options) => {
162
+ const { generateComponent } = await import('./commands/generate/component.js');
163
+ await generateComponent(name, options);
164
+ });
165
+ generateCmd
166
+ .command('api <name>')
167
+ .description('生成 API 模块 (位于 src/api/)')
168
+ .option('-e, --endpoint <endpoint>', 'API 请求路径 (如 /api/v1/orders)')
169
+ .option('-m, --method <method>', 'HTTP 请求方法 (get | post | put | patch | delete)', 'get')
170
+ .option('--client <client>', '指定已有 HTTP 客户端路径')
171
+ .option('--init-client', '若不存在则初始化标准 HTTP 客户端')
172
+ .option('--json', '以 JSON 格式输出结果')
173
+ .action(async (name, options) => {
174
+ const { generateApi } = await import('./commands/generate/api.js');
175
+ await generateApi(name, options);
82
176
  });
83
177
  program.parse();
84
178
  //# sourceMappingURL=index.js.map
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,17 +1,19 @@
1
1
  {
2
2
  "name": "@farris/cli",
3
3
  "private": false,
4
- "version": "2.0.2",
4
+ "version": "2.1.0",
5
5
  "type": "module",
6
6
  "typings": "lib/index.d.ts",
7
7
  "bin": {
8
8
  "farris-cli": "./bin/index.js"
9
9
  },
10
10
  "engines": {
11
- "node": ">=16.0.0"
11
+ "node": "^18.0.0 || >=20.0.0",
12
+ "pnpm": ">=9.0.0"
12
13
  },
13
- "scripts": {
14
- "build": "rimraf ./lib && tsc"
14
+ "scripts": {
15
+ "build": "rimraf ./lib && tsc",
16
+ "test": "vitest run --config vitest.config.ts"
15
17
  },
16
18
  "files": [
17
19
  "lib",
@@ -26,17 +28,19 @@
26
28
  "commander": "^9.4.0",
27
29
  "esbuild": "^0.23.0",
28
30
  "esbuild-sass-plugin": "^3.3.1",
31
+ "fs-extra": "^11.2.0",
32
+ "glob": "^10.4.5",
29
33
  "inquirer": "^9.3.0",
30
34
  "ora": "^8.0.1",
31
- "typescript": "^4.6.4",
32
- "vite": "^4.4.1",
35
+ "typescript": "^5.7.3",
36
+ "vite": "^5.4.19",
33
37
  "vite-plugin-css-injected-by-js": "^3.5.2",
34
- "vite-plugin-dts": "^3.9.1",
35
- "glob": "11.0.3"
38
+ "vite-plugin-dts": "^3.9.1"
36
39
  },
37
40
  "devDependencies": {
41
+ "@types/fs-extra": "^11.0.4",
38
42
  "@types/inquirer": "^9.0.7",
39
43
  "rimraf": "^5.0.7",
40
- "vue": "^3.2.37"
44
+ "vue": "^3.5.13"
41
45
  }
42
- }
46
+ }
@@ -0,0 +1,13 @@
1
+ import { fileURLToPath, URL } from 'node:url';
2
+
3
+ export default {
4
+ base: '<%= base %>',
5
+ routerMode: '<%= routerMode %>',
6
+ format: '<%= format %>',
7
+ minify: true,
8
+ externalDependencies: false,
9
+ alias: [
10
+ { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }
11
+ ],
12
+ viteConfig: {}
13
+ };
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title><%= title %></title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="/src/main.ts"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "<%= appName %>",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "farris-cli dev",
8
+ "build": "farris-cli build",
9
+ "preview": "farris-cli preview",
10
+ "typecheck": "vue-tsc --noEmit"
11
+ },
12
+ "dependencies": {
13
+ "@farris/ui-vue": "catalog:",
14
+ "vue": "catalog:"<%= routerDependency %>
15
+ },
16
+ "devDependencies": {
17
+ "@farris/cli": "catalog:",
18
+ "typescript": "catalog:",
19
+ "vite": "catalog:",
20
+ "vue-tsc": "catalog:"<%= sassDevDependency %>
21
+ }
22
+ }
@@ -0,0 +1,11 @@
1
+ import { defineComponent } from 'vue';<%= appRouterImport %>
2
+
3
+ export default defineComponent({
4
+ name: 'App',
5
+ setup() {
6
+ return () => (
7
+ <%= appTemplateBody %>
8
+ );
9
+ }
10
+ });
11
+
@@ -0,0 +1,11 @@
1
+ import { createApp } from 'vue';
2
+ import FarrisUI from '@farris/ui-vue';
3
+ import '@farris/ui-vue/style.css';<%= styleImport %><%= routerImport %><%= i18nImport %>
4
+ import App from './App';
5
+
6
+ const app = createApp(App);
7
+
8
+ app.use(FarrisUI);<%= routerUse %><%= i18nUse %>
9
+
10
+ app.mount('#app');
11
+
@@ -0,0 +1,16 @@
1
+ import { createRouter, <%= routerHistoryFunction %>, type RouteRecordRaw } from 'vue-router';
2
+
3
+ export const routes: RouteRecordRaw[] = [
4
+ {
5
+ path: '/',
6
+ name: 'Home',
7
+ component: () => import('../views/home')
8
+ }
9
+ ];
10
+
11
+ const router = createRouter({
12
+ history: <%= routerHistoryCall %>,
13
+ routes
14
+ });
15
+
16
+ export default router;
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ export function useHome() {
2
+ const title = '<%= title %>';
3
+
4
+ return {
5
+ title
6
+ };
7
+ }
@@ -0,0 +1,15 @@
1
+ import { defineComponent } from 'vue';
2
+ import { useHome } from './composables/use-home';
3
+
4
+ export default defineComponent({
5
+ name: 'HomeView',
6
+ setup() {
7
+ const { title } = useHome();
8
+
9
+ return () => (
10
+ <div class="f-page-home">
11
+ <h2>{title}</h2>
12
+ </div>
13
+ );
14
+ }
15
+ });
@@ -0,0 +1,4 @@
1
+ import HomeComponent from './home.component';
2
+
3
+ export { HomeComponent };
4
+ export default HomeComponent;
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "Node",
7
+ "strict": true,
8
+ "jsx": "preserve",
9
+ "jsxImportSource": "vue",
10
+ "resolveJsonModule": true,
11
+ "isolatedModules": true,
12
+ "esModuleInterop": true,
13
+ "lib": ["ESNext", "DOM"],
14
+ "skipLibCheck": true,
15
+ "types": ["vite/client"],
16
+ "paths": {
17
+ "@/*": ["./src/*"]
18
+ }
19
+ },
20
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
21
+ }
@@ -0,0 +1,28 @@
1
+ # <%= title %>
2
+
3
+ 基于 Farris Vue 的前端工程 Workspace。
4
+
5
+ ## 目录结构
6
+
7
+ ```text
8
+ ├── packages/
9
+ │ └── <%= appDir %>/ # 应用源码
10
+ ├── pnpm-workspace.yaml # pnpm workspace 配置及 Catalog 依赖版本
11
+ └── package.json # 根工程脚本
12
+ ```
13
+
14
+ ## 快速上手
15
+
16
+ ```bash
17
+ # 安装依赖
18
+ pnpm install
19
+
20
+ # 启动开发服务器
21
+ pnpm --filter "<%= appName %>" dev
22
+
23
+ # 执行全量类型检查
24
+ pnpm typecheck
25
+
26
+ # 构建生产产物
27
+ pnpm build
28
+ ```
@@ -0,0 +1,13 @@
1
+ {
2
+ "private": true,
3
+ "packageManager": "pnpm@<%= pnpmVersion %>",
4
+ "engines": {
5
+ "node": "^18.0.0 || >=20.0.0",
6
+ "pnpm": ">=9.0.0 <10.0.0"
7
+ },
8
+ "scripts": {
9
+ "build": "pnpm --recursive --if-present run build",
10
+ "dev": "pnpm --recursive --if-present run dev",
11
+ "typecheck": "pnpm --recursive --if-present run typecheck"
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ packages:
2
+ - "packages/*"
3
+
4
+ catalog:
5
+ "@farris/ui-vue": "<%= farrisUiVueVersion %>"
6
+ "@farris/cli": "<%= farrisCliVersion %>"
7
+ "typescript": "<%= typescriptVersion %>"
8
+ "vite": "<%= viteVersion %>"
9
+ "vue": "<%= vueVersion %>"
10
+ "vue-router": "<%= vueRouterVersion %>"
11
+ "vue-tsc": "<%= vueTscVersion %>"
12
+ "sass": "<%= sassVersion %>"