@xfe-repo/cli-plugin-project-web 2.0.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.
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @xfe-repo/cli-plugin-project-web - Web/PC 前端项目脚本插件
3
+ */
4
+ import type { XfePlugin } from '@xfe-repo/cli-core';
5
+ export interface WebProjectPluginOptions {
6
+ envKey?: string;
7
+ businessList?: {
8
+ name: string;
9
+ value: string;
10
+ }[];
11
+ businessEnvKey?: string;
12
+ }
13
+ export declare const webStoreInitial: {
14
+ business: string;
15
+ };
16
+ declare module '@xfe-repo/cli-core' {
17
+ interface XfePluginRegistry {
18
+ 'project-web': XfePlugin<typeof webStoreInitial>;
19
+ }
20
+ }
21
+ export declare function webProjectPlugin(options?: WebProjectPluginOptions): XfePlugin<typeof webStoreInitial>;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAA;AAalE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,eAAO,MAAM,eAAe;;CAE3B,CAAA;AAED,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAU,iBAAiB;QACzB,aAAa,EAAE,SAAS,CAAC,OAAO,eAAe,CAAC,CAAA;KACjD;CACF;AAID,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,SAAS,CAAC,OAAO,eAAe,CAAC,CAoCzG"}
package/dist/index.js ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @xfe-repo/cli-plugin-project-web - Web/PC 前端项目脚本插件
3
+ */
4
+ import { z } from 'zod';
5
+ import { projectPlugin, resolveEnvParameters } from '@xfe-repo/cli-plugin-project';
6
+ // ─── Types ──────────────────────────────────────────────────
7
+ const switchBusinessParameters = z.object({
8
+ business: z.string().optional().describe('业务平台标识;仅带 businessList 的 Web 项目需要'),
9
+ });
10
+ const webDevParameters = switchBusinessParameters.merge(resolveEnvParameters);
11
+ export const webStoreInitial = {
12
+ business: '',
13
+ };
14
+ // ─── 插件工厂 ──────────────────────────────────────────────
15
+ export function webProjectPlugin(options = {}) {
16
+ return {
17
+ name: 'project-web',
18
+ dependencies: [projectPlugin],
19
+ setup(_ctx, hooks) {
20
+ hooks.registerStore(webStoreInitial);
21
+ hooks.registerCommand({
22
+ name: 'dev',
23
+ simpleDescription: '启动 Web 开发脚本',
24
+ description: '运行当前 Web/PC 项目的 dev 脚本。执行前会复用或解析 apiEnv/envNum,并在支持多业务的平台中复用或解析 business;执行时会注入 API 环境变量、GENERATE_SOURCEMAP=false,以及业务平台环境变量(若配置)。',
25
+ parameters: webDevParameters,
26
+ execute: (ctx) => runScript(ctx, options, 'dev'),
27
+ });
28
+ hooks.registerCommand({
29
+ name: 'build',
30
+ simpleDescription: '执行 Web 构建脚本',
31
+ description: '运行当前 Web/PC 项目的 build 脚本。执行前会复用或解析 apiEnv/envNum,并在支持多业务的平台中复用或解析 business;执行时会注入 API 环境变量、GENERATE_SOURCEMAP=false,以及业务平台环境变量(若配置)。',
32
+ parameters: webDevParameters,
33
+ execute: (ctx) => runScript(ctx, options, 'build'),
34
+ });
35
+ if (options.businessList?.length) {
36
+ hooks.registerCommand({
37
+ name: 'switchBusiness',
38
+ simpleDescription: '切换默认业务平台',
39
+ description: '强制切换当前 Web 项目的默认业务平台并写入 store。后续 dev/build 如果未显式传 business,会复用这个值。仅在预设配置了 businessList 时可用。',
40
+ parameters: switchBusinessParameters,
41
+ execute: (ctx) => switchBusiness(ctx, options.businessList ?? [], { force: true }),
42
+ });
43
+ }
44
+ },
45
+ };
46
+ }
47
+ // ─── 命令处理 ──────────────────────────────────────────────
48
+ async function switchBusiness(ctx, businessList, options) {
49
+ const current = ctx.store.getState()['project-web']?.business;
50
+ const hasPrefilled = ctx.prefilled.business !== undefined;
51
+ if (!options?.force && current && !hasPrefilled)
52
+ return;
53
+ const { business = '' } = await ctx.prompt.ask({
54
+ type: 'rawlist',
55
+ message: '请选择业务平台',
56
+ name: 'business',
57
+ default: ctx.store.getState()['project-web']?.business || undefined,
58
+ choices: businessList,
59
+ });
60
+ ctx.store.setPluginState('project-web', { business });
61
+ }
62
+ async function ensureEnvReady(ctx, opts) {
63
+ const project = ctx.inject('project');
64
+ await project.resolveEnv(ctx);
65
+ if (!opts.businessList?.length)
66
+ return;
67
+ await switchBusiness(ctx, opts.businessList ?? []);
68
+ }
69
+ async function runScript(ctx, opts, script) {
70
+ await ensureEnvReady(ctx, opts);
71
+ const { runPrefix, hostPrefix = '' } = ctx.store.getState().project || {};
72
+ const envKey = opts.envKey ?? 'REACT_APP_API_ENV';
73
+ const envVars = { [envKey]: hostPrefix, GENERATE_SOURCEMAP: 'false' };
74
+ if (opts.businessList?.length) {
75
+ const businessEnvKey = opts.businessEnvKey ?? 'REACT_APP_BUSINESS';
76
+ const { business = '' } = ctx.store.getState()['project-web'] ?? webStoreInitial;
77
+ envVars[businessEnvKey] = business;
78
+ }
79
+ await ctx.exec.run(`${runPrefix} ${script}`, { cwd: ctx.projectRoot, env: envVars });
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@xfe-repo/cli-plugin-project-web",
3
+ "version": "2.0.0",
4
+ "description": "XFE web/PC project type plugin",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "dependencies": {
9
+ "zod": "^4.3.6",
10
+ "@xfe-repo/cli-core": "2.0.0",
11
+ "@xfe-repo/cli-plugin-project": "2.0.0"
12
+ },
13
+ "devDependencies": {
14
+ "@types/node": "^24.3.0",
15
+ "typescript": "^5.9.2"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "license": "ISC",
21
+ "scripts": {
22
+ "dev": "tsc -p tsconfig.json -w",
23
+ "build": "tsc -p tsconfig.json",
24
+ "clean": "rm -rf dist"
25
+ }
26
+ }