@epxing/cli 0.4.0 → 0.5.0-beta.1

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/API.md ADDED
@@ -0,0 +1,90 @@
1
+ # @epxing/cli API
2
+
3
+ 独立工程命令行工具,终端命令名为 epxing。/vite 提供产品构建插件,根入口不提供业务运行时。
4
+
5
+ 本页对应包版本 `0.5.0-beta.1`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
6
+
7
+ ## 安装与使用
8
+
9
+
10
+ ```sh
11
+ npm install -g @epxing/cli@0.5.0-beta.1
12
+ ```
13
+
14
+
15
+ ```sh
16
+ epxing help
17
+ epxing --version
18
+ epxing dev --port 3000
19
+ epxing build --mode prd
20
+ epxing lib
21
+ epxing create my-product --packages-version 5.3.0-beta.2
22
+ epxing migrate . --packages-version 5.3.0-beta.2
23
+ ```
24
+
25
+ ## 接入约定
26
+
27
+ 工程命令使用当前项目已安装的依赖和脚本。--dir 指定项目目录;创建/迁移时用 --packages-version 指定 @epxing 平台包版本;--epx-frame 保留旧聚合模式,两者互斥。CLI 采用自己的版本号,独立于其余平台包。完整参数、迁移与发布说明见本包 README。
28
+
29
+ ## 稳定子路径
30
+
31
+ 下表按实际 package.json 的公开入口列出。default 使用默认导入,其他名称使用具名导入;类型接口用 import type。
32
+
33
+ | 导入路径 | 完整导出名 | 用途 / 详细说明 |
34
+ | --- | --- | --- |
35
+ | `@epxing/cli/vite` | `frameDeps`、`epxShared`、`lazyLib`、`LazyLibOptions`(类型) | 对应 `vite` 模块。 |
36
+
37
+ ## 子路径补充导出
38
+
39
+ 本节列出仅在稳定子路径中提供的具名 API;从本节标题对应路径导入。
40
+
41
+ ### @epxing/cli/vite
42
+
43
+ | 导出 / 调用签名 | 用途 | 详细接口 |
44
+ | --- | --- | --- |
45
+ | `frameDeps(): Plugin<any>` | Vite 构建插件:生成产品远程库依赖清单,供宿主在执行产品代码前加载组件。 | 见声明及接入约定 |
46
+ | `epxShared(): Plugin<any>` | Vite 构建插件:将产品的公开平台/Vue 导入映射到宿主共享命名空间,仅在构建时启用。 | 见声明及接入约定 |
47
+ | `lazyLib(options?: LazyLibOptions): Promise<Plugin<any>>` | 异步创建产品按需库构建插件,使用产品自己的 Vite 和 SFC 编译器,支持 enabled/root/glob/pkgName/eager。 | 见声明及接入约定 |
48
+
49
+ ## 导出的 TypeScript 类型
50
+
51
+ 以下名称仅存在于类型系统,用 import type 导入,不作为运行时对象使用。
52
+
53
+ ### LazyLibOptions
54
+
55
+ ```ts
56
+ interface LazyLibOptions { enabled?: boolean; root?: string; glob?: string; pkgName?: string; eager?: string[] }
57
+ ```
58
+
59
+ ## 命令完整目录
60
+
61
+ | 命令 | 行为 |
62
+ | --- | --- |
63
+ | `epxing` / `epxing menu` | 交互选择操作、工程目录、环境、端口和构建方式;管道支持数字输入 |
64
+ | `epxing dev` / `epxing serve` | 使用工程 `dev`、`serve` 或 `start` 脚本启动服务 |
65
+ | `epxing build` | 使用工程的构建脚本;只有 `build:lib` 的产品自动构建产品库 |
66
+ | `epxing lib` / `epxing build --lib` / `epxing lib --lazy` | 产品默认懒加载,优先 `build:lib:lazy`,否则使用 `build:lib` / `lib`;平台聚合库仍完整构建 |
67
+ | `epxing lib --full` / `epxing build --lib --full` | 产品完整打包,明确设置 `LAZY_LIB=false`;兼容旧 `--target lib` 脚本 |
68
+ | `epxing preview` | 使用 `preview` / `vite:preview`;没有脚本时使用工程本地 Vite |
69
+ | `epxing create` | 无参数进入创建引导,也可用参数直接创建 |
70
+ | `epxing migrate` / `epxing upgrade` | 无参数引导:目标版本、迁移范围、预览、确认应用 |
71
+ | `epxing skill install` | 安装技能,支持自定义目录和明确覆盖 |
72
+ | `epxing scan` / `epxing verify` | 迁移风险扫描 / 本地与线上组件清单校验 |
73
+ | `epxing theme [目录] [--apply]` | 补修产品/项目主题样式,默认只读预览;迁移时自动执行 |
74
+ | `epxing lint [--fix]` / `epxing circular` | 执行工程已有的代码检查、循环依赖检查脚本 |
75
+ | `epxing remote` / `epxing pkg <包名\|all>` | 使用平台已有 `build:remote` / `build:pkg` / `build:pkgs` 脚本 |
76
+ | `epxing help` / `epxing --version` | 帮助 / 工具版本 |
77
+
78
+ 无参数的 create/migrate 提供交互引导;migrate/theme 默认预览,审阅后加 --apply 写入。完整参数请运行 epxing help 或阅读 README。
79
+
80
+ ## 源码兼容与其他入口
81
+
82
+ package.json 供构建工具读取包元数据;本包不提供 /src/* 兼容路径。
83
+
84
+ | 公开路径模式 | 实际目标 |
85
+ | --- | --- |
86
+ | `@epxing/cli/package.json` | `./package.json` |
87
+
88
+ ## 文档维护
89
+
90
+ 本页由 build/gen-package-api-docs.mjs 生成。修改公开入口并更新构建产物和类型声明后,在框架根运行 `pnpm docs:api`;`pnpm docs:api:check` 检查清单、类型、包内文档与站点镜像是否同步,同时验证页面编译和文档链接。用途和示例维护在 build/package-api-notes.mjs,组件和源码方法的详细参考位于 docs/revision。
package/README.md CHANGED
@@ -1,22 +1,40 @@
1
1
  # @epxing/cli
2
2
 
3
- 独立的工程开发工具,包含交互菜单、开发服务、工程与产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。CLI 使用自己的版本号,目标平台由 `--epx-frame` 指定;发布包没有 npm 运行时依赖。启动、构建调用当前工程的脚本及本地依赖;迁移代码与框架仓库的 `tools/` 共用,打包时编译为独立 Node 程序。
3
+ [完整公开 API、导入方式与示例](./API.md)
4
+
5
+ 独立的工程开发工具,包含交互菜单、开发服务、产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。0.5 测试版新增 `@epxing/*` 独立包产品:用 `--packages-version` 指定平台包版本,CLI 使用自己的版本号。创建和升级会生成产品使用说明;`@epxing/cli/vite` 提供产品构建插件,不依赖聚合包中的构建工具。
6
+
7
+ 本批测试版本:`@epxing/cli@0.5.0-beta.1`,平台包 `5.3.0-beta.2`,均使用 npm 公网 `beta` 标签。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
8
+
9
+ 平台包从 `5.3.0-beta.2` 起自动加载自身样式,产品无需手动引入各包的 `style.css`。创建和迁移使用此版本时,CLI 不再添加这些导入;指定旧版本或无法确定版本下限的标签时,仍保留显式样式以兼容旧包。已有显式导入可以保留,产品覆盖样式放在框架导入之后。
4
10
 
5
11
  ```powershell
6
- npm install -g @epxing/cli@0.4.0 --registry https://registry.npmjs.org/
12
+ npm install -g @epxing/cli@beta --registry https://registry.npmjs.org/
7
13
  epxing # ↑↓ + Enter 选择;Esc / Ctrl+C 取消
8
14
  epxing dev --port 3000
9
15
  epxing build --mode prd
10
16
  epxing lib # 产品默认懒加载;平台目录构建完整聚合组件库
11
17
  epxing lib --full # 产品完整打包
12
18
  epxing lib --lazy # 显式选择懒加载,兼容已有命令
13
- epxing create my-product --epx-frame <目标平台版本>
14
- epxing migrate E:/products/old-product --epx-frame <目标平台版本>
15
- epxing migrate E:/products/old-product --epx-frame <目标平台版本> --apply
19
+ epxing create my-product --packages-version 5.3.0-beta.2
20
+ epxing migrate E:/products/old-product --packages-version 5.3.0-beta.2
21
+ epxing migrate E:/products/old-product --packages-version 5.3.0-beta.2 --apply
22
+ epxing migrate E:/products/old-product --packages-version 5.3.0-beta.2 --transform-vue --to-vite --apply
16
23
  epxing skill install --dir E:/products/my-product
17
24
  ```
18
25
 
19
- 从 0.4.0 起终端命令改为 `epxing`,不再注册 `epx`,因此可与旧 `epx-frame` CLI 的 `epx` 共存。包名仍是 `@epxing/cli`,产品依赖仍是 `epx-frame`。更新同一个全局 CLI 包时 npm 会替换其旧命令;不要使用 `--force` 覆盖其他包的命令。工具不在安装阶段运行迁移、下载平台或改产品文件;产品仍需安装目标框架依赖才能开发和构建。
26
+ 从 0.4.0 起终端命令为 `epxing`,可与旧聚合 CLI 的 `epx` 共存。新产品直接依赖 `@epxing/core`、`@epxing/component`、`@epxing/utils` 等包。创建后进入目录安装依赖,再运行 `npm run dev`;默认端口 8080。工具安装阶段不会运行迁移或改产品文件。
27
+
28
+ `--epx-frame <版本或spec>` 保留旧聚合产品模式,与 `--packages-version` 互斥;需要独立包时使用新参数。无参数交互引导默认使用独立包。迁移遇到动态旧接口等无法确定的内容时返回 2,报告人工清单并保留原包模式;不会只切换一半导入。已有业务路由、store 和 install 注册代码保留;已有自定义 `PRODUCT-GUIDE.md` 会保留,另写 `EPXING-PACKAGES-GUIDE.md`。
29
+
30
+ ```js
31
+ // vite.config.mjs:由创建模板自动配置;远程库构建启用共享映射。
32
+ import { frameDeps, epxShared, lazyLib } from '@epxing/cli/vite'
33
+ import epxIcons from '@epxing/icons'
34
+ // plugins: [frameDeps(), epxShared(), lazyLib({ root, enabled, glob, pkgName })]
35
+ ```
36
+
37
+ 开发和独立应用直接使用 npm 包。远程库构建通过宿主共享 core、组件、工具和 Vue;宿主需要同版本包并完成组件组安装。`epxing lib` 默认按需构建,`--full` 完整构建;按需部署必须上传整个 `lib/` 目录。`npm run build:app` 构建新模板的独立应用到 `dist/`。实体组件需要配置后端、元数据和权限。
20
38
 
21
39
  使用 fnm/nvm 时,不同 Node 版本的全局包分别安装。切换到日常使用的 Node 版本后更新 CLI,再用 `epxing help` 确认开头为 `@epxing/cli`、`epxing --version` 确认版本。旧仓库的 `pnpm epx` 仍是该仓库自己的脚本。
22
40
 
@@ -49,7 +67,7 @@ epxing skill install --dir E:/products/my-product
49
67
 
50
68
  平台 `epxing build` 保留 `--thin`、`--no-designer`、`--no-dashboard`;产品工程不接受平台裁剪选项。需向工程脚本透传其他参数时使用 `--`,如 `epxing dev -- --host 0.0.0.0`。脚本原有的 pre/post 生命周期、自定义环境和多步构建会保留,失败退出码向上传递。
51
69
 
52
- `create` 和 `migrate --apply` 自动写入 `runtime: "vue3"`。带参数直接调用时 `--epx-frame` 必填,交互引导也会要求输入目标平台。迁移默认预览;apply 要求目标 Git 工作树干净。实际执行 `.vue` 转换时才按需安装并缓存 gogocode。标识表示迁移目标,仍需完成转换、构建和业务复测。
70
+ `create` 和 `migrate --apply` 自动写入 `runtime: "vue3"`。带参数直接调用时指定 `--packages-version`(独立包)或 `--epx-frame`(旧聚合模式)。迁移默认预览;apply 要求目标 Git 工作树干净。实际执行 `.vue` 转换时才按需安装并缓存 gogocode。标识表示迁移目标,仍需完成转换、构建和业务复测。
53
71
 
54
72
  0.4.0 的迁移会同步适配平台主题:常见静态字号(12/14/16/20px)、圆角(2/4/8px,包括多角简写)和明确的语义颜色改为平台 CSS 变量,保留原值兜底。覆盖 Vue 样式块、template/JSX/render 内联样式和 src 中的 CSS/SCSS/Less;不改 scoped,不导入全局主题,不改圆形、胶囊、图标、打印及动画中的固定设计。动态样式、特殊字号/圆角、缩进式 Sass/Stylus 等列入复核清单,需按技能 E2 继续分析。返回码 2 表示有待复核项;不代表自动修复没有写入。已有 Vue3 工程可运行 `epxing theme <目录>` 预览,审查后加 `--apply`;无须重跑依赖迁移。最终产物须验证平台字号、圆角、明暗与密度切换、懒加载和样式隔离。
55
73
 
package/dist/cli.mjs CHANGED
@@ -28,9 +28,11 @@ function takeOption (args, name) {
28
28
  }
29
29
 
30
30
  function requireTarget (args) {
31
+ const packagesVersion = takeOption(args, '--packages-version')
31
32
  const target = takeOption(args, '--epx-frame')
32
- if (!target) throw new Error('请用 --epx-frame 指定目标平台版本或包 spec;CLI 版本不作为平台版本。')
33
- return target
33
+ if (packagesVersion && target) throw new Error('--packages-version 与 --epx-frame 不能同时指定')
34
+ if (!target && !packagesVersion) throw new Error('请用 --packages-version 指定 @epxing 包版本;--epx-frame 仅用于旧聚合模式。CLI 与平台分别版本。')
35
+ return { value: packagesVersion || target, independent: Boolean(packagesVersion) }
34
36
  }
35
37
 
36
38
  function runTool (script, args, cwd) {
@@ -83,18 +85,18 @@ async function interactive (cwd, action) {
83
85
  if (action === 'help') return dispatch(['help'])
84
86
  if (action === 'create') {
85
87
  const name = await prompts.required('产品名或目标路径')
86
- const target = await prompts.required('目标 epx-frame 版本或包 spec')
88
+ const target = await prompts.required('目标 @epxing 包版本', '5.3.0-beta.1')
87
89
  const dir = await prompts.text('生成目录', name)
88
- return dispatch(['create', name, '--dir', dir, '--epx-frame', target])
90
+ return dispatch(['create', name, '--dir', dir, '--packages-version', target])
89
91
  }
90
92
  if (action === 'migrate') {
91
93
  const dir = await prompts.required('待升级工程目录', '.')
92
- const target = await prompts.required('目标 epx-frame 版本或包 spec')
94
+ const target = await prompts.required('目标 @epxing 包版本', '5.3.0-beta.1')
93
95
  const flags = await prompts.select('迁移范围', choices([
94
96
  ['依赖与入口迁移', []], ['依赖、入口与 Vue 组件转换', ['--transform-vue']],
95
97
  ['依赖、Vue 组件及 Vite 构建迁移', ['--transform-vue', '--to-vite']]
96
98
  ]))
97
- const args = ['migrate', dir, '--epx-frame', target, ...flags]
99
+ const args = ['migrate', dir, '--packages-version', target, ...flags]
98
100
  const preview = await main(args, cwd)
99
101
  if (preview !== 0 || !(await prompts.confirm('应用以上迁移?要求 Git 工作树干净;默认不修改'))) return preview
100
102
  return dispatch([...args, '--apply'])
@@ -173,8 +175,8 @@ export async function main (argv = process.argv.slice(2), cwd = process.env.INIT
173
175
  epxing lib [--full | --lazy] [-m <模式>] [--dir <目录>] 产品默认懒加载,--full 完整打包;平台聚合库保持完整
174
176
  epxing build --lib 同 epxing lib
175
177
  epxing preview [-p <端口>] [--dir <目录>]
176
- epxing create <名称|路径> --epx-frame <目标版本> [--dir <目录>]
177
- epxing migrate [项目目录] --epx-frame <目标版本> [--apply] [--transform-vue] [--to-vite]
178
+ epxing create <名称|路径> --packages-version <平台包版本> [--dir <目录>]
179
+ epxing migrate [项目目录] --packages-version <平台包版本> [--apply] [--transform-vue] [--to-vite]
178
180
  epxing scan [项目目录]
179
181
  epxing theme [项目目录] [--apply] 主题变量补修,默认只读;迁移时自动执行
180
182
  epxing verify [项目目录] [--online <线上JS地址|文件>]
@@ -187,7 +189,8 @@ export async function main (argv = process.argv.slice(2), cwd = process.env.INIT
187
189
 
188
190
  dev / build / lib 等执行当前工程的 package.json 脚本,使用工程本地依赖。
189
191
  工程命令可用 -- 后的参数透传给脚本;serve / upgrade 分别是 dev / migrate 的别名。
190
- create、migrate 不带参数时进入引导;直接带参数时 --epx-frame 必填。
192
+ create、migrate 不带参数时进入独立包引导;直接带参数时 --packages-version 必填。
193
+ --epx-frame <版本或spec> 保留旧聚合模式,与 --packages-version 互斥。
191
194
  创建和升级自动写入 runtime: "vue3"。迁移默认 dry-run,--apply 才落盘。
192
195
  工具不会自动安装平台依赖;.vue 转换工具仅在执行 --apply --transform-vue 时下载并缓存。`)
193
196
  return 0
@@ -208,7 +211,8 @@ create、migrate 不带参数时进入引导;直接带参数时 --epx-frame
208
211
  const dir = path.resolve(cwd, chosenDir || nameOrPath)
209
212
  const name = /[\\/]/.test(nameOrPath) ? path.basename(path.resolve(cwd, nameOrPath)) : nameOrPath
210
213
  const { scaffold } = await import(pathToFileURL(path.join(payload, 'tools/epx-create/scaffold.mjs')).href)
211
- scaffold({ name, dir, epxFrameSpec: target })
214
+ const cliVersion = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')).version
215
+ scaffold({ name, dir, ...(target.independent ? { packagesVersion: target.value } : { epxFrameSpec: target.value }), cliVersion })
212
216
  return 0
213
217
  }
214
218
  if (command === 'migrate') {
@@ -216,7 +220,8 @@ create、migrate 不带参数时进入引导;直接带参数时 --epx-frame
216
220
  const dirs = args.filter(arg => !arg.startsWith('-'))
217
221
  if (dirs.length > 1) throw new Error('一次迁移一个项目目录')
218
222
  const dir = dirs[0] || '.'
219
- return runTool('epx-migrate/migrate.mjs', [path.resolve(cwd, dir), ...args.filter(arg => arg !== dir), '--epx-frame', target], cwd)
223
+ const cliVersion = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')).version
224
+ return runTool('epx-migrate/migrate.mjs', [path.resolve(cwd, dir), ...args.filter(arg => arg !== dir), target.independent ? '--packages-version' : '--epx-frame', target.value, ...(target.independent ? ['--cli-version', cliVersion] : [])], cwd)
220
225
  }
221
226
  if (command === 'theme') {
222
227
  const apply = args.includes('--apply')
@@ -1,2 +1,2 @@
1
- import{a as A,b as C}from"./SH6LMMHZ.mjs";import{a as c,c as d}from"./H4POBCHI.mjs";var $=d(A(),1);import k from"node:fs";import b from"node:path";var v=c(s=>/^(?:el-date-picker|el-time-picker|ElDatePicker|ElTimePicker)$/.test(s||""),"isPicker"),E=c(s=>/^(?:format|value-format|valueFormat)$/.test(s||""),"isFormat"),u=c(s=>s?.name??s?.value,"keyOf"),P={sourceType:"unambiguous",plugins:["jsx","typescript"]};function _(s){let m={yyyy:"YYYY",yy:"YY",dd:"DD",d:"D"};return s.replace(/\[[^\]]*\]|yyyy|yy|dddd|ddd|dd|d/g,p=>m[p]||p)}c(_,"normalizePickerFormat");function S(s,m){if(!(!s||typeof s!="object")){typeof s.type=="string"&&m(s);for(let[p,f]of Object.entries(s))p==="loc"||p==="comments"||p==="tokens"||(Array.isArray(f)?f.forEach(y=>S(y,m)):f&&typeof f=="object"&&S(f,m))}}c(S,"walk");function O(s,{filename:m="component.vue"}={}){let p=new Map,f=new Set,y=c(t=>s.slice(0,t).split(`
1
+ import{a as A,b as C}from"./6CGUHPTB.mjs";import{a as c,c as d}from"./H4POBCHI.mjs";var $=d(A(),1);import k from"node:fs";import b from"node:path";var v=c(s=>/^(?:el-date-picker|el-time-picker|ElDatePicker|ElTimePicker)$/.test(s||""),"isPicker"),E=c(s=>/^(?:format|value-format|valueFormat)$/.test(s||""),"isFormat"),u=c(s=>s?.name??s?.value,"keyOf"),P={sourceType:"unambiguous",plugins:["jsx","typescript"]};function _(s){let m={yyyy:"YYYY",yy:"YY",dd:"DD",d:"D"};return s.replace(/\[[^\]]*\]|yyyy|yy|dddd|ddd|dd|d/g,p=>m[p]||p)}c(_,"normalizePickerFormat");function S(s,m){if(!(!s||typeof s!="object")){typeof s.type=="string"&&m(s);for(let[p,f]of Object.entries(s))p==="loc"||p==="comments"||p==="tokens"||(Array.isArray(f)?f.forEach(y=>S(y,m)):f&&typeof f=="object"&&S(f,m))}}c(S,"walk");function O(s,{filename:m="component.vue"}={}){let p=new Map,f=new Set,y=c(t=>s.slice(0,t).split(`
2
2
  `).length,"lineAt");function n(t,e){f.add(`L${y(t)}\uFF1A${e}`)}c(n,"warn");function g(t,e,i){let o=_(i);if(o===i)return;let x=s.slice(t,e);if(/\\/.test(x)){n(t,"\u65E5\u671F\u683C\u5F0F\u542BJS\u8F6C\u4E49\u5B57\u7B26\uFF0C\u8FFD\u8E2A\u539F\u503C\u540E\u4FEE\u590D\uFF0C\u907F\u514D\u6539\u53D8\u8F6C\u4E49\u8BED\u4E49");return}p.set(t,{start:t,end:e,text:_(x),before:i,after:o,line:y(t)})}c(g,"literal");function l(t,e){if(t?.type==="StringLiteral")return g(e+t.start,e+t.end,t.value),!0;if(t?.type==="TemplateLiteral"&&!t.expressions.length)return g(e+t.start,e+t.end,t.quasis[0].value.cooked||""),!0;if(t?.type==="ConditionalExpression"){let i=l(t.consequent,e),o=l(t.alternate,e);return i&&o}if(t?.type==="LogicalExpression"){let i=l(t.left,e),o=l(t.right,e);return i&&o}return n(e+(t?.start||0),`\u65E5\u671F\u63A7\u4EF6\u52A8\u6001\u683C\u5F0F ${s.slice(e+(t?.start||0),e+(t?.end||0)).slice(0,100)}\uFF1A\u8FFD\u8E2A\u53D8\u91CF/\u5BF9\u8C61/\u51FD\u6570\u7684\u683C\u5F0F\u6765\u6E90\uFF0C\u786E\u8BA4\u7528\u9014\u540E\u4FEE\u590D\uFF1B\u4E0D\u8981\u5168\u5C40\u66FF\u6362\u540C\u540D\u540E\u7AEF/\u65E5\u671F\u5E93\u683C\u5F0F`),!1}c(l,"expression");function w(t){if(!(!t||typeof t!="object")){if(t.type===1&&v(t.tag)){for(let e of t.props)if(e.type===6&&E(e.name)&&e.value)g(e.value.loc.start.offset,e.value.loc.end.offset,e.value.content);else if(e.type===7&&e.name==="bind"){if(!e.arg||!e.arg.isStatic)n(e.loc.start.offset,"\u65E5\u671F\u63A7\u4EF6 v-bind \u5BF9\u8C61/\u52A8\u6001\u5C5E\u6027\u540D\uFF1A\u8FFD\u8E2A format/valueFormat/value-format \u5E76\u4FEE\u590D\u65E7 token");else if(E(e.arg.content)&&e.exp){if(e.exp.loc.source!==e.exp.content){n(e.loc.start.offset,"\u65E5\u671F\u683C\u5F0F\u7ED1\u5B9A\u542BHTML\u5B9E\u4F53\uFF0C\u89E3\u7801\u5E76\u6838\u5BF9\u540E\u4FEE\u590D");continue}try{l((0,$.parseExpression)(e.exp.content,P),e.exp.loc.start.offset)}catch(i){n(e.loc.start.offset,`\u65E5\u671F\u683C\u5F0F\u8868\u8FBE\u5F0F\u65E0\u6CD5\u89E3\u6790\uFF1A${i.message}`)}}}}Array.isArray(t.children)&&t.children.forEach(w)}}c(w,"templateNode");function D(t,e){let i;try{i=(0,$.parse)(t,P)}catch(r){n(e,`\u811A\u672C\u65E0\u6CD5\u89E3\u6790\uFF0C\u65E5\u671F\u63A7\u4EF6\u9700\u590D\u6838\uFF1A${r.message}`);return}let o=new Set(["ElDatePicker","ElTimePicker"]),x=new Set(["h","createElement","_c","_h","createVNode","_createVNode","createBlock","_createBlock"]);S(i,r=>{if(r.type==="ImportDeclaration"&&r.source.value==="element-plus")for(let a of r.specifiers)v(u(a.imported))&&o.add(a.local.name);if(r.type==="ImportDeclaration"&&r.source.value==="vue")for(let a of r.specifiers)/^(h|createVNode|createBlock)$/.test(u(a.imported))&&x.add(a.local.name);r.type==="VariableDeclarator"&&r.id.type==="Identifier"&&r.init?.type==="CallExpression"&&/^(?:_?resolveComponent)$/.test(u(r.init.callee))&&v(r.init.arguments[0]?.value)&&o.add(r.id.name)});function F(r){return v(u(r))||o.has(u(r))||r?.type==="CallExpression"&&/^(?:_?resolveComponent)$/.test(u(r.callee))&&v(r.arguments[0]?.value)}c(F,"pickerTag");function T(r){if(r){if(r.type!=="ObjectExpression"){n(e+r.start,"\u65E5\u671F\u63A7\u4EF6\u5C5E\u6027\u6765\u81EA\u53D8\u91CF/\u51FD\u6570\uFF1A\u8FFD\u8E2A\u683C\u5F0F\u914D\u7F6E\u540E\u4FEE\u590D");return}for(let a of r.properties){if(a.type==="SpreadElement"){n(e+a.start,"\u65E5\u671F\u63A7\u4EF6\u5C5E\u6027\u5C55\u5F00\uFF1A\u8FFD\u8E2A\u5C55\u5F00\u5BF9\u8C61\u4E2D\u7684\u65E7\u683C\u5F0F");continue}if(a.computed){n(e+a.start,"\u65E5\u671F\u63A7\u4EF6\u52A8\u6001\u5C5E\u6027\u952E\uFF1A\u590D\u6838\u683C\u5F0F\u914D\u7F6E");continue}E(u(a.key))?l(a.value,e):["attrs","props"].includes(u(a.key))&&T(a.value)}}}c(T,"propsObject"),S(i,r=>{if(r.type==="JSXOpeningElement"&&F(r.name))for(let a of r.attributes){if(a.type==="JSXSpreadAttribute"){n(e+a.start,"\u65E5\u671F\u63A7\u4EF6 JSX \u5C5E\u6027\u5C55\u5F00\uFF1A\u8FFD\u8E2A\u683C\u5F0F\u914D\u7F6E\u540E\u4FEE\u590D");continue}E(u(a.name))&&l(a.value?.type==="JSXExpressionContainer"?a.value.expression:a.value,e)}if(r.type==="CallExpression"){let a=r.callee?.type==="MemberExpression"?u(r.callee.property):u(r.callee);x.has(a)&&F(r.arguments[0])&&T(r.arguments[1])}})}if(c(D,"script"),/\.vue$/i.test(m)){let t=[],e=C(s,{parseMode:"sfc",onError:c(i=>t.push(i),"onError")});for(let i of t)n(i.loc?.start?.offset||0,`\u6A21\u677F\u89E3\u6790\u63D0\u793A\uFF0C\u9700\u590D\u6838\uFF1A${i.message}`);for(let i of e.children)if(i.tag==="template"&&w(i),i.tag==="script"&&i.children?.length){let o=i.children[0].loc.start.offset,x=i.children.at(-1).loc.end.offset;D(s.slice(o,x),o)}}else D(s,0);let j=[...p.values()].sort((t,e)=>e.start-t.start),h=s;for(let t of j)h=h.slice(0,t.start)+t.text+h.slice(t.end);return{src:h,count:j.length,fixes:j.reverse(),warnings:[...f]}}c(O,"fixDateFormats");function M(s,{apply:m=!1}={}){let p=[];function f(y){if(k.existsSync(y)){for(let n of k.readdirSync(y,{withFileTypes:!0}))if(n.isDirectory()&&!/^(?:node_modules|\.git|lib|dist)$/.test(n.name))f(b.join(y,n.name));else if(n.isFile()&&/\.(?:vue|[cm]?js|jsx|ts|tsx)$/.test(n.name)){let g=b.join(y,n.name),l=O(k.readFileSync(g,"utf8"),{filename:g});m&&l.count&&k.writeFileSync(g,l.src),(l.count||l.warnings.length)&&p.push({file:b.relative(s,g),...l})}}}return c(f,"scan"),f(b.join(s,"src")),p}c(M,"fixProjectDateFormats");export{O as a,M as b};
@@ -1,4 +1,4 @@
1
- import{a as H,b as M}from"./SH6LMMHZ.mjs";import{a as g,c as q}from"./H4POBCHI.mjs";var z=q(H(),1);import A from"node:fs";import C from"node:path";var B={sourceType:"unambiguous",plugins:["jsx","typescript"]},J=/\.(?:vue|[cm]?js|jsx|ts|tsx|css|scss|less|sass|styl|stylus)$/i,k=/@(?:media[^{}]*\bprint|page|font-face|(?:-\w+-)?keyframes)\b|(?:^|[\s.#:_-])(?:icon(?:font)?|svg|canvas|print)(?:$|[\s.#:_-])|\.fa(?:[\s.:-]|$)/i,N={2:"s",4:"base",8:"l"},I={12:"s",14:"base",16:"l",20:"xl"},P={color:{"#303133":"epx-text","#909399":"epx-text-secondary","#444":"color-text-primary","#444444":"color-text-primary","#666":"color-text-secondary","#666666":"color-text-secondary","#999":"color-text-assistant","#999999":"color-text-assistant"},"background-color":{"#fff":"epx-bg-card","#ffffff":"epx-bg-card","#f5f7fa":"epx-bg"},"border-color":{"#dcdfe6":"epx-border"}};function X(l,f){let x=f.match(/\s*!important\s*$/i)?.[0]||"",u=f.slice(0,f.length-x.length).trim();if(/^(?:inherit|initial|unset|revert|none)$|var\(|calc\(/i.test(u))return{value:f};if(l==="font-size"){let r=/^(\d+(?:\.\d+)?)px$/i.exec(u)?.[1];return r&&I[r]?{value:`var(--epx-font-size-${I[r]}, ${u})${x}`}:/^0(?:px)?$|^[\d.]+(?:rem|em|%)$/i.test(u)?{value:f}:{value:f,review:!0}}if(/^border(?:-(?:top-left|top-right|bottom-left|bottom-right))?-radius$/.test(l))return/^(?:0(?:px)?|50%|100%|999(?:9)?px)$/i.test(u)?{value:f}:/^(?:\d+(?:\.\d+)?px|0)(?:\s+(?:\d+(?:\.\d+)?px|0)){0,3}(?:\s*\/\s*(?:\d+(?:\.\d+)?px|0)(?:\s+(?:\d+(?:\.\d+)?px|0)){0,3})?$/i.test(u)?[...u.matchAll(/(\d+(?:\.\d+)?)px/gi)].some(m=>Number(m[1])!==0&&!N[m[1]])?{value:f,review:!0}:{value:u.replace(/(\d+(?:\.\d+)?)px/gi,(m,v)=>N[v]?`var(--epx-radius-${N[v]}, ${m})`:m)+x}:{value:f,review:!0};let b=P[l]?.[u.toLowerCase()];return b?{value:`var(--${b}, ${u})${x}`}:{value:f,review:/^(?:font|font-size|border-radius)$/.test(l)}}g(X,"themedValue");function Z(l,{filename:f="component.vue"}={}){let x=new Map,u=new Set,b=g(e=>l.slice(0,e).split(`
1
+ import{a as H,b as M}from"./6CGUHPTB.mjs";import{a as g,c as q}from"./H4POBCHI.mjs";var z=q(H(),1);import A from"node:fs";import C from"node:path";var B={sourceType:"unambiguous",plugins:["jsx","typescript"]},J=/\.(?:vue|[cm]?js|jsx|ts|tsx|css|scss|less|sass|styl|stylus)$/i,k=/@(?:media[^{}]*\bprint|page|font-face|(?:-\w+-)?keyframes)\b|(?:^|[\s.#:_-])(?:icon(?:font)?|svg|canvas|print)(?:$|[\s.#:_-])|\.fa(?:[\s.:-]|$)/i,N={2:"s",4:"base",8:"l"},I={12:"s",14:"base",16:"l",20:"xl"},P={color:{"#303133":"epx-text","#909399":"epx-text-secondary","#444":"color-text-primary","#444444":"color-text-primary","#666":"color-text-secondary","#666666":"color-text-secondary","#999":"color-text-assistant","#999999":"color-text-assistant"},"background-color":{"#fff":"epx-bg-card","#ffffff":"epx-bg-card","#f5f7fa":"epx-bg"},"border-color":{"#dcdfe6":"epx-border"}};function X(l,f){let x=f.match(/\s*!important\s*$/i)?.[0]||"",u=f.slice(0,f.length-x.length).trim();if(/^(?:inherit|initial|unset|revert|none)$|var\(|calc\(/i.test(u))return{value:f};if(l==="font-size"){let r=/^(\d+(?:\.\d+)?)px$/i.exec(u)?.[1];return r&&I[r]?{value:`var(--epx-font-size-${I[r]}, ${u})${x}`}:/^0(?:px)?$|^[\d.]+(?:rem|em|%)$/i.test(u)?{value:f}:{value:f,review:!0}}if(/^border(?:-(?:top-left|top-right|bottom-left|bottom-right))?-radius$/.test(l))return/^(?:0(?:px)?|50%|100%|999(?:9)?px)$/i.test(u)?{value:f}:/^(?:\d+(?:\.\d+)?px|0)(?:\s+(?:\d+(?:\.\d+)?px|0)){0,3}(?:\s*\/\s*(?:\d+(?:\.\d+)?px|0)(?:\s+(?:\d+(?:\.\d+)?px|0)){0,3})?$/i.test(u)?[...u.matchAll(/(\d+(?:\.\d+)?)px/gi)].some(m=>Number(m[1])!==0&&!N[m[1]])?{value:f,review:!0}:{value:u.replace(/(\d+(?:\.\d+)?)px/gi,(m,v)=>N[v]?`var(--epx-radius-${N[v]}, ${m})`:m)+x}:{value:f,review:!0};let b=P[l]?.[u.toLowerCase()];return b?{value:`var(--${b}, ${u})${x}`}:{value:f,review:/^(?:font|font-size|border-radius)$/.test(l)}}g(X,"themedValue");function Z(l,{filename:f="component.vue"}={}){let x=new Map,u=new Set,b=g(e=>l.slice(0,e).split(`
2
2
  `).length,"lineAt"),r=g((e,s)=>u.add(`L${b(e)}: ${s}`),"warn");function m(e,s,t,i){let n=X(e,s);n.review&&r(t,`\u4E3B\u9898\u6837\u5F0F\u5F85\u590D\u6838 ${e}: ${s}\uFF1B\u8FFD\u8E2A\u52A8\u6001\u6765\u6E90\u6216\u786E\u8BA4\u7279\u6B8A\u5C3A\u5BF8\uFF0C\u4E0D\u4F5C\u5168\u5C40\u66FF\u6362`),n.value!==s&&x.set(t,{start:t,end:i,text:n.value,before:s,after:n.value,line:b(t)})}g(m,"value");function v(e,s,t=!1,i=""){let n=0,p="",c=0,y=0,d=[i],S=e.split("");function O(o){if(!t&&d.length<2)return;let a=S.slice(n,o).join(""),h=/^(\s*)([a-z][a-z-]*)(\s*:\s*)([\s\S]*?)\s*$/i.exec(a);if(!h)return;let j=h[2].toLowerCase();if(!/^(?:font(?:-size)?|border(?:-(?:top-left|top-right|bottom-left|bottom-right))?-radius|color|background-color|border-color)$/.test(j)||d.some(V=>k.test(V)))return;let $=n+h[1].length+h[2].length+h[3].length,T=e.slice($,$+h[4].length);if(T!==h[4]){r(s+$,"\u6837\u5F0F\u503C\u542B\u6CE8\u91CA\uFF0C\u4FDD\u7559\u539F\u6587\u5E76\u590D\u6838\u4E3B\u9898\u9002\u914D");return}m(j,T,s+$,s+$+T.length)}g(O,"declaration");for(let o=0;o<e.length;o++){let a=e[o];if(p){a==="\\"?o++:a===p&&(p="");continue}if(a==='"'||a==="'"){p=a;continue}if(a==="/"&&(e[o+1]==="*"||e[o+1]==="/"&&!c)){let h=e[o+1]==="*"?e.indexOf("*/",o+2):e.indexOf(`
3
3
  `,o+2),j=h<0?e.length:h+(e[o+1]==="*"?2:0);for(let $=o;$<j;$++)S[$]!==`
4
4
  `&&(S[$]=" ");o=j-1;continue}if((a==="#"||a==="@")&&e[o+1]==="{"){let h=e.indexOf("}",o+2);if(h<0){r(s+o,"\u672A\u95ED\u5408\u7684\u6837\u5F0F\u63D2\u503C\uFF0C\u9700\u4EBA\u5DE5\u590D\u6838");return}o=h;continue}a==="("&&c++,a===")"&&c--,a==="["&&y++,a==="]"&&y--,!(c||y)&&(a==="{"?(d.push(S.slice(n,o).join("").trim()),n=o+1):a===";"?(O(o),n=o+1):a==="}"&&(O(o),d.pop(),n=o+1))}t&&O(e.length)}g(v,"css");function w(e,s){if(e?.type==="StringLiteral"){let t=l.slice(s+e.start+1,s+e.end-1);if(/\\/.test(t)){r(s+e.start,"\u5185\u8054\u6837\u5F0F\u542B\u8F6C\u4E49\uFF0C\u9700\u590D\u6838");return}v(t,s+e.start+1,!0);return}if(e?.type==="ArrayExpression"){e.elements.filter(Boolean).forEach(t=>w(t,s));return}if(e?.type==="ConditionalExpression"){w(e.consequent,s),w(e.alternate,s);return}if(e?.type!=="ObjectExpression"){r(s+(e?.start||0),"\u52A8\u6001 style\uFF1A\u8FFD\u8E2A\u53D8\u91CF/\u51FD\u6570\u4E2D\u7684\u5B57\u53F7\u3001\u5706\u89D2\u3001\u989C\u8272\uFF0C\u4FDD\u7559\u7279\u6B8A\u5E03\u5C40");return}for(let t of e.properties){if(t.type!=="ObjectProperty"||t.computed){r(s+t.start,"\u52A8\u6001 style \u5C5E\u6027/\u5C55\u5F00\u5BF9\u8C61\u5F85\u8FFD\u8E2A");continue}let i=(t.key.name||t.key.value||"").replace(/[A-Z]/g,n=>"-"+n.toLowerCase());/^(?:font(?:-size)?|border(?:-(?:top-left|top-right|bottom-left|bottom-right))?-radius|color|background-color|border-color)$/.test(i)&&(t.value.type==="StringLiteral"&&!/\\/.test(l.slice(s+t.value.start,s+t.value.end))?m(i,t.value.value,s+t.value.start+1,s+t.value.end-1):r(s+t.value.start,`\u52A8\u6001/\u975E\u5B57\u7B26\u4E32 ${i} \u5F85\u590D\u6838`))}}g(w,"objectStyle");function F(e){if(!(e.type===1&&(/^(?:svg|canvas|i|el-icon)$/i.test(e.tag)||e.props.some(s=>s.type===6&&s.name==="class"&&k.test(s.value?.content||""))))){if(e.type===1&&!/^(?:svg|canvas|i|el-icon)$/i.test(e.tag)){let s=e.props.filter(t=>t.type===6&&t.name==="class").map(t=>t.value?.content||"").join(" ");if(!k.test(s)){for(let t of e.props)if(t.type===6&&t.name==="style"&&t.value){let i=l.slice(t.value.loc.start.offset+1,t.value.loc.end.offset-1);if(i!==t.value.content){r(t.loc.start.offset,"\u5185\u8054 style \u542B HTML \u5B9E\u4F53\uFF0C\u9700\u590D\u6838");continue}v(i,t.value.loc.start.offset+1,!0,s)}else if(t.type===7&&t.name==="bind"&&t.arg?.content==="style"&&t.exp)try{if(t.exp.loc.source!==t.exp.content){r(t.loc.start.offset,"style \u8868\u8FBE\u5F0F\u542B HTML \u5B9E\u4F53\uFF0C\u9700\u590D\u6838");continue}w((0,z.parseExpression)(t.exp.content,B),t.exp.loc.start.offset)}catch(i){r(t.loc.start.offset,`style \u8868\u8FBE\u5F0F\u65E0\u6CD5\u89E3\u6790\uFF1A${i.message}`)}}}e.children?.forEach(F)}}g(F,"template");function _(e,s){let t;try{t=(0,z.parse)(e,B)}catch(n){r(s,`\u811A\u672C\u65E0\u6CD5\u89E3\u6790\uFF0C\u4E3B\u9898\u6837\u5F0F\u9700\u590D\u6838\uFF1A${n.message}`);return}function i(n){if(!(!n||typeof n!="object")){if(n.type==="JSXElement"){let p=n.openingElement;if(/^(?:svg|canvas|i|el-icon|ElIcon)$/.test(p.name?.name||"")||p.attributes.some(c=>["class","className"].includes(c.name?.name)&&k.test(c.value?.value||"")))return}if(n.type==="JSXOpeningElement"){let p=n.name?.name||"",c=n.attributes.filter(y=>y.name?.name==="class"||y.name?.name==="className").map(y=>y.value?.value||"").join(" ");if(!/^(?:svg|canvas|i|el-icon|ElIcon)$/.test(p)&&!k.test(c))for(let y of n.attributes)y.name?.name==="style"&&w(y.value?.expression||y.value,s)}if(n.type==="CallExpression"&&/^(?:h|createElement|createVNode|createBlock|_createVNode|_createBlock)$/.test(n.callee?.name||"")){let p=n.arguments[1],c=n.arguments[0]?.value||n.arguments[0]?.name||"",y=p?.properties?.filter(d=>["class","className"].includes(d.key?.name||d.key?.value)).map(d=>d.value?.value||"").join(" ")||"";if(p?.type==="ObjectExpression"&&!k.test(y)&&!/^(?:svg|canvas|i|el-icon|ElIcon)$/.test(c))for(let d of p.properties)(d.key?.name||d.key?.value)==="style"&&w(d.value,s)}for(let[p,c]of Object.entries(n))["loc","comments","tokens"].includes(p)||(Array.isArray(c)?c.forEach(i):c&&typeof c=="object"&&i(c))}}g(i,"walk"),i(t)}if(g(_,"script"),/\.(?:sass|styl|stylus)$/i.test(f))r(0,"\u7F29\u8FDB\u5F0F\u6837\u5F0F\u9700\u4EBA\u5DE5\u8FC1\u79FB\u4E3B\u9898\u53D8\u91CF\uFF0C\u672A\u81EA\u52A8\u6539\u5199");else if(/\.(?:css|scss|less)$/i.test(f))v(l,0);else if(/\.vue$/i.test(f))try{let e=M(l,{parseMode:"sfc"});for(let s of e.children.filter(t=>t.type===1))if(s.tag==="template")F(s);else if(s.tag==="style"){s.props.some(i=>i.name==="src")&&r(s.loc.start.offset,"\u5916\u90E8\u6837\u5F0F src\uFF1A\u786E\u8BA4\u5728\u6E90\u7801\u626B\u63CF\u8303\u56F4\u5185\u5E76\u590D\u6838\u4E3B\u9898");let t=s.props.find(i=>i.name==="lang")?.value?.content;if(t&&!["css","scss","less"].includes(t)){r(s.loc.start.offset,`\u6837\u5F0F\u8BED\u8A00 ${t} \u9700\u4EBA\u5DE5\u9002\u914D\u4E3B\u9898`);continue}for(let i of s.children)i.type===2&&v(i.content,i.loc.start.offset)}else if(s.tag==="script")for(let t of s.children)t.type===2&&_(t.content,t.loc.start.offset)}catch(e){r(0,`SFC \u65E0\u6CD5\u89E3\u6790\uFF0C\u4E3B\u9898\u6837\u5F0F\u9700\u590D\u6838\uFF1A${e.message}`)}else _(l,0);let L=[...x.values()].sort((e,s)=>e.start-s.start),E=l;for(let e of[...L].reverse())E=E.slice(0,e.start)+e.text+E.slice(e.end);return{src:E,count:L.length,fixes:L,warnings:[...u]}}g(Z,"fixThemeStyles");function Q(l,{apply:f=!1}={}){let x=[];function u(b){for(let r of A.readdirSync(b,{withFileTypes:!0})){if(r.isSymbolicLink())continue;let m=C.join(b,r.name);if(r.isDirectory()&&!/^(?:node_modules|\.git|lib|dist)$/.test(r.name))u(m);else if(r.isFile()&&J.test(r.name)){let v=Z(A.readFileSync(m,"utf8"),{filename:m});(v.count||v.warnings.length)&&x.push({file:C.relative(l,m),...v}),f&&v.count&&A.writeFileSync(m,v.src)}}}return g(u,"walk"),u(C.join(l,"src")),x}g(Q,"fixProjectThemeStyles");export{Z as a,Q as b};
@@ -1,4 +1,209 @@
1
- var x=Object.defineProperty;var f=(i,a)=>x(i,"name",{value:a,configurable:!0});import r from"node:fs";import o from"node:path";import{execSync as _}from"node:child_process";import{fileURLToPath as v,pathToFileURL as g}from"node:url";var m=o.resolve(o.dirname(v(import.meta.url)),"../.."),n={};n["package.json"]=`{
1
+ var b=Object.defineProperty;var d=(i,t)=>b(i,"name",{value:t,configurable:!0});import l from"node:fs";import m from"node:path";import{execSync as v}from"node:child_process";import{fileURLToPath as h,pathToFileURL as y}from"node:url";function A(i="5.3.0-beta.2"){let t=i.match(/^[~^]?(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?$/);if(!t)return!1;let[,o,n,p,a]=t,s=Number(o)*1e6+Number(n)*1e3+Number(p);return s!==5003e3?s>5003e3:!a||/^beta\.(\d+)$/.test(a)&&Number(a.slice(5))>=2}d(A,"usesAutomaticStyles");var I=["@epxing/core/style.css","@epxing/component/style.css","@epxing/business/style.css"];function g(i,t){let o={...i,"package.json":JSON.stringify({name:"__NAME__",version:"0.1.0",private:!0,runtime:"vue3",type:"module",scripts:{dev:"vite","build:lib":"vite build","build:lib:lazy":"cross-env LAZY_LIB=true vite build","build:app":"vite build --mode app",preview:"vite preview"},dependencies:{"@epxing/core":"__PACKAGES_VERSION__","@epxing/component":"__PACKAGES_VERSION__","@epxing/utils":"__PACKAGES_VERSION__","@epxing/business":"__PACKAGES_VERSION__","@epxing/theme":"__PACKAGES_VERSION__",vue:"3.5.39","vue-router":"4.6.4",vuex:"4.1.0","element-plus":"2.14.3"},devDependencies:{"@epxing/cli":"__CLI_VERSION__","@epxing/icons":"__PACKAGES_VERSION__",vite:"^6.0.0","@vitejs/plugin-vue":"^5.2.1","@vitejs/plugin-vue-jsx":"^4.1.1",sass:"^1.83.3","cross-env":"^7.0.3"}},null,2)+`
2
+ `,"vite.config.mjs":`import path from 'node:path'
3
+ import { fileURLToPath } from 'node:url'
4
+ import { createRequire } from 'node:module'
5
+ import { defineConfig, loadEnv } from 'vite'
6
+ import vue from '@vitejs/plugin-vue'
7
+ import vueJsx from '@vitejs/plugin-vue-jsx'
8
+ import { frameDeps, epxShared, lazyLib } from '@epxing/cli/vite'
9
+ import epxIcons from '@epxing/icons'
10
+ import pkg from './package.json' with { type: 'json' }
11
+
12
+ const root = path.dirname(fileURLToPath(import.meta.url))
13
+ const require = createRequire(import.meta.url)
14
+ const CONFIG_KEYS = ['IP', 'BASE_URL', 'BASE_PROJECT_NAME', 'BASE_AUTH_NAME', 'BASE_CLIENT_ID', 'BASE_SYSTEM_ID', 'BASE_APP_ID', 'ROUTER_MODE', 'MINIO_FILE_URL', 'WITH_CREDENTIALS']
15
+
16
+ export default defineConfig(({ command, mode }) => {
17
+ const env = loadEnv(mode, root, '')
18
+ const library = command === 'build' && mode !== 'app'
19
+ return {
20
+ resolve: { alias: { '@': path.resolve(root, 'src') }, dedupe: ['vue', 'vuex', 'vue-router'] },
21
+ server: { port: 8080 },
22
+ plugins: [
23
+ vue(), vueJsx(), epxIcons(),
24
+ ...(library ? [
25
+ frameDeps(), epxShared(),
26
+ lazyLib({ root, enabled: process.env.LAZY_LIB === 'true', glob: './__DIRNAME__/**/*.vue', pkgName: pkg.name })
27
+ ] : []),
28
+ {
29
+ name: 'product-runtime-config',
30
+ transformIndexHtml () {
31
+ const lines = CONFIG_KEYS.map(key => key === 'WITH_CREDENTIALS'
32
+ ? 'window.' + key + ' = ' + JSON.stringify(env[key] === 'true')
33
+ : 'window.' + key + ' = ' + JSON.stringify(env[key] || ''))
34
+ lines.push('window.MINIO_IP = window.IP || window.location.origin + "/"')
35
+ return [{ tag: 'script', children: lines.join('\\n'), injectTo: 'head-prepend' }]
36
+ }
37
+ }
38
+ ],
39
+ css: { preprocessorOptions: { scss: {
40
+ additionalData: '@import "' + require.resolve('@epxing/theme/src/theme/utils/mixins.scss').replace(/\\\\/g, '/') + '";',
41
+ quietDeps: true, silenceDeprecations: ['import', 'legacy-js-api', 'global-builtin']
42
+ } } },
43
+ build: library ? {
44
+ outDir: 'lib',
45
+ lib: { entry: path.resolve(root, 'src/index.js'), name: 'library.' + pkg.name, formats: ['umd'], fileName: () => 'index.js' },
46
+ rollupOptions: { output: { exports: 'default', assetFileNames: asset =>
47
+ (asset.names || [asset.name]).some(name => String(name).endsWith('.css')) ? 'index.css' : 'assets/[name]-[hash][extname]' } }
48
+ } : { outDir: 'dist' }
49
+ }
50
+ })
51
+ `,"src/main.js":`import { createApp } from '@epxing/core'
52
+ import Components from '@epxing/component'
53
+ import Business from '@epxing/business'
54
+ import '@epxing/theme'
55
+ import App from './App.vue'
56
+ import product from './index'
57
+
58
+ const app = createApp({ rootComponent: App })
59
+ app.use(Components)
60
+ app.use(Business)
61
+ app.use(product)
62
+ app.mount('#app')
63
+ `,"src/App.vue":`<script setup>
64
+ import { ref } from 'vue'
65
+ const count = ref(0)
66
+ </script>
67
+
68
+ <template>
69
+ <main class="product-start">
70
+ <h1>__NAME__</h1>
71
+ <p>\u4EA7\u54C1\u5DF2\u542F\u52A8\uFF0C\u53EF\u4EE5\u5F00\u59CB\u5F00\u53D1\u3002</p>
72
+ <button @click="count++">\u70B9\u51FB {{ count }} \u6B21</button>
73
+ </main>
74
+ </template>
75
+
76
+ <style scoped>
77
+ .product-start { padding: var(--epx-space-4, 24px); color: var(--epx-text); }
78
+ </style>
79
+ `,"src/__DIRNAME__/DemoList.vue":`<script>
80
+ import { EntityList } from '@epxing/component'
81
+ export default {
82
+ name: 'epx-__NAME__-demo-list',
83
+ extends: EntityList
84
+ // \u914D\u7F6E\u771F\u5B9E metaId\u3001listFields\u3001operates \u540E\uFF0C\u5728\u4EA7\u54C1\u9875\u9762\u4E2D\u4F7F\u7528\u3002
85
+ }
86
+ </script>
87
+ <style lang="scss" scoped>
88
+ .epx-__NAME__-demo-card {
89
+ @include epx-card;
90
+ font-size: var(--epx-font-size-base, 14px);
91
+ }
92
+ </style>
93
+ `,"README.md":`# __NAME__
94
+
95
+ \u57FA\u4E8E @epxing/* \u72EC\u7ACB\u5305\u7684 Vue 3 \u4EA7\u54C1\u3002\u8BE6\u7EC6\u8BF4\u660E\u89C1 [\u4EA7\u54C1\u4F7F\u7528\u6587\u6863](./PRODUCT-GUIDE.md)\u3002
96
+
97
+ \`\`\`sh
98
+ npm install --registry https://registry.npmjs.org/
99
+ npm run dev
100
+ npx epxing lib
101
+ npx epxing lib --full
102
+ npm run build:app
103
+ \`\`\`
104
+
105
+ \u672C\u5730\u9884\u89C8\u9ED8\u8BA4\u7AEF\u53E3 8080\uFF0C\u542F\u52A8\u9875\u4E0D\u4F9D\u8D56\u540E\u7AEF\u3002\u5B9E\u4F53\u5217\u8868\u3001\u8868\u5355\u3001\u4EBA\u5458\u9009\u62E9\u7B49\u529F\u80FD\u9700\u8981\u914D\u7F6E\u540E\u7AEF\u3001\u5143\u6570\u636E\u548C\u6743\u9650\u3002
106
+ `,"PRODUCT-GUIDE.md":S};if(!A(t)){let n=I.map(p=>`import '${p}'`).join(`
107
+ `);for(let p of["src/main.js","PRODUCT-GUIDE.md"])o[p]=o[p].replace("import '@epxing/theme'",`import '@epxing/theme'
108
+ `+n)}return o}d(g,"createPackageTemplates");var S=`# \u4EA7\u54C1\u5F00\u53D1\u4E0E\u5347\u7EA7\u4F7F\u7528\u8BF4\u660E
109
+
110
+ <!-- epxing-generated-product-guide -->
111
+
112
+ \u5E73\u53F0\u5305\u7248\u672C\uFF1A\`__PACKAGES_VERSION__\`\uFF1BCLI \u7248\u672C\uFF1A\`__CLI_VERSION__\`\u3002CLI \u4E0E\u5E73\u53F0\u5305\u5206\u522B\u5347\u7EA7\u3002
113
+
114
+ ## \u5B89\u88C5\u4E0E\u542F\u52A8
115
+
116
+ \`\`\`sh
117
+ npm install --registry https://registry.npmjs.org/
118
+ npm run dev
119
+ \`\`\`
120
+
121
+ \u672C\u5730\u9ED8\u8BA4 http://localhost:8080\u3002\`.env.development.local\` \u53EF\u8986\u76D6 IP\u3001BASE_CLIENT_ID\u3001BASE_SYSTEM_ID \u7B49\u914D\u7F6E\u3002\u5B9E\u4F53\u7EC4\u4EF6\u9700\u8981\u53EF\u7528\u540E\u7AEF\u548C\u5BF9\u5E94\u5143\u6570\u636E\uFF1B\u521D\u59CB\u6B22\u8FCE\u9875\u53EF\u72EC\u7ACB\u8FD0\u884C\u3002
122
+
123
+ ## \u5E94\u7528\u5165\u53E3
124
+
125
+ \`\`\`js
126
+ import { createApp } from '@epxing/core'
127
+ import Components from '@epxing/component'
128
+ import Business from '@epxing/business'
129
+ import '@epxing/theme'
130
+ import App from './App.vue'
131
+ import product from './index'
132
+
133
+ const app = createApp({ rootComponent: App })
134
+ app.use(Components)
135
+ app.use(Business)
136
+ app.use(product)
137
+ app.mount('#app')
138
+ \`\`\`
139
+
140
+ createApp \u8FD4\u56DE Vue App\uFF0C\u9ED8\u8BA4\u521B\u5EFA\u72EC\u7ACB store\u3001hash router \u548C HTTP \u5BA2\u6237\u7AEF\u3002\u9700\u8981\u81EA\u5B9A\u4E49\u65F6\u4F20\u5165 \`{ rootComponent, store, router, http: productHttp }\`\u3002\u4EA7\u54C1 HTTP \u5BA2\u6237\u7AEF\u9700\u5B9E\u73B0\u9875\u9762\u5B9E\u9645\u8C03\u7528\u7684 find/get/list/save \u7B49\u534F\u8BAE\u3002
141
+
142
+ \u4ECE\u5E73\u53F0\u5305 5.3.0-beta.2 \u8D77\uFF0Ccore\u3001component/components\u3001business\u3001designer\u3001dashboard \u7684 JS \u5165\u53E3\u81EA\u52A8\u52A0\u8F7D\u672C\u5305\u805A\u5408\u6837\u5F0F\uFF0C\u6839\u5BFC\u5165\u548C\u7EC4\u4EF6\u5B50\u8DEF\u5F84\u90FD\u65E0\u9700\u624B\u52A8 import style.css\u3002utils \u548C icons \u5DE5\u5177\u4E0D\u52A0\u8F7D UI \u6837\u5F0F\uFF1Btheme \u4ECD\u662F\u663E\u5F0F\u4F7F\u7528\u7684 SCSS \u6E90\u7801\u5305\u3002\u81EA\u52A8\u52A0\u8F7D\u6309\u5305\u805A\u5408\uFF0C\u4E0D\u662F\u5355\u4E2A\u7EC4\u4EF6\u7684 CSS \u88C1\u526A\u3002
143
+
144
+ \u4FDD\u7559 style.css \u5165\u53E3\u4EE5\u517C\u5BB9\u65E7\u4EE3\u7801\uFF1B\u5DF2\u6709\u624B\u52A8\u5BFC\u5165\u53EF\u4EE5\u5220\u9664\u3002\u4EA7\u54C1\u8986\u76D6\u6837\u5F0F\u653E\u5728\u6846\u67B6\u5BFC\u5165\u4E4B\u540E\u3002CLI \u6307\u5B9A\u65E7\u7248\u672C\u6216\u65E0\u6CD5\u786E\u5B9A\u7248\u672C\u4E0B\u9650\u7684\u6807\u7B7E\u65F6\uFF0C\u4F1A\u4FDD\u5B88\u4FDD\u7559\u663E\u5F0F CSS \u5BFC\u5165\u3002
145
+
146
+ \u4EA7\u54C1\u9700\u8981\u5E73\u53F0\u767B\u5F55\u4E0E\u57FA\u7840\u8DEF\u7531\u65F6\uFF0C\u53EF\u4F7F\u7528 \`createApp({ router: createFrameRouter() })\`\uFF0C\u5E76\u5B89\u88C5\u57FA\u7840\u7EC4\u4EF6\u4E0E Business\uFF0C\u914D\u7F6E\u5BA2\u6237\u7AEF/\u7CFB\u7EDF\u53C2\u6570\u548C\u540E\u7AEF\uFF1B\u9ED8\u8BA4\u8DEF\u7531\u6839\u89C6\u56FE\u7531 core \u63D0\u4F9B\u3002\u81EA\u6709\u8DEF\u7531\u5219\u4F20\u5165\u4EA7\u54C1 router \u6216 routes\u3002
147
+
148
+ ## \u7EC4\u4EF6\u4E0E\u5DE5\u5177
149
+
150
+ \`\`\`js
151
+ import { EntityList, AddForm, AddFormItem } from '@epxing/component'
152
+ import { UserFind, EntityTreeManage } from '@epxing/business'
153
+ import { mixins, getSystemMeta, getFileUrl, http, createFieldFactory } from '@epxing/core'
154
+ import { cloneDeep, moment, resolvePlaceholders, storage } from '@epxing/utils'
155
+
156
+ export default {
157
+ name: 'epx-__NAME__-employee-list',
158
+ extends: EntityList,
159
+ metaId: '\u4EA7\u54C1\u5B9E\u9645\u5143\u6570\u636EID',
160
+ pageSize: 20
161
+ }
162
+ \`\`\`
163
+
164
+ \u914D\u7F6E\u9A71\u52A8\u7EC4\u4EF6\u7ECF $configs \u8BFB\u53D6\u5408\u6210\u914D\u7F6E\u3002ComponentMixin/mixins.component \u63D0\u4F9B\u9875\u9762\u4E0A\u4E0B\u6587\uFF1B\u666E\u901A Vue props \u4E0E\u914D\u7F6E\u9879\u8BF7\u6309\u5404\u7EC4\u4EF6 API \u4F7F\u7528\u3002\`runExpByScope.call(vm, scopes, data)\` \u4FDD\u7559\u7EC4\u4EF6\u4E0A\u4E0B\u6587\u3002\u9ED8\u8BA4\u5DE5\u5177\u5BF9\u8C61\u4E0E\u5177\u540D API \u4EE5\u5BF9\u5E94\u5305 API.md \u4E3A\u51C6\u3002
165
+
166
+ \u9700\u8981\u8BBE\u8BA1\u5668/\u770B\u677F\u65F6\uFF0C\u5B89\u88C5\u540C\u7248\u672C \`@epxing/designer\` / \`@epxing/dashboard\`\uFF0C\u5728\u672C\u5730\u5E94\u7528\u5BFC\u5165\u5E76\u5B89\u88C5\u63D2\u4EF6\uFF0C\u6837\u5F0F\u81EA\u52A8\u52A0\u8F7D\u3002\u8FDC\u7A0B\u4EA7\u54C1\u4F7F\u7528\u516C\u5F00\u7EC4\u4EF6\uFF0C\u5BBF\u4E3B\u8D1F\u8D23\u5B89\u88C5\u8BBE\u8BA1/\u4E1A\u52A1\u63D2\u4EF6\u53CA\u52A0\u8F7D\u5176\u6837\u5F0F\u3002
167
+
168
+ \u5404\u5305 API.md \u968F\u5B89\u88C5\u5305\u63D0\u4F9B\uFF0C\u53EF\u5728 node_modules/@epxing/<\u5305\u540D>/API.md \u67E5\u770B\u3002\u5355\u6570 component \u4E0E\u590D\u6570 components \u4F7F\u7528\u76F8\u540C\u7EC4\u4EF6\u5BF9\u8C61\uFF0C\u4EA7\u54C1\u7EDF\u4E00\u9009\u4E00\u4E2A\u540D\u79F0\u3002\u65B0\u4EE3\u7801\u4F7F\u7528\u6839\u5BFC\u51FA\u53CA\u7A33\u5B9A\u5B50\u8DEF\u5F84\u3002
169
+
170
+ ## \u72EC\u7ACB\u5E94\u7528\u4E0E\u8FDC\u7A0B\u4EA7\u54C1\u5E93
171
+
172
+ \`\`\`sh
173
+ npm run build:app # dist/\uFF1A\u72EC\u7ACB\u5E94\u7528\uFF0C\u4F7F\u7528 npm \u5305
174
+ npx epxing lib # lib/\uFF1A\u9ED8\u8BA4\u6309\u9700\u4EA7\u54C1\u5E93
175
+ npx epxing lib --full # lib/\uFF1A\u5B8C\u6574\u4EA7\u54C1\u5E93
176
+ npm run build:lib # \u76F4\u63A5 Vite \u5B8C\u6574\u5E93\u6784\u5EFA
177
+ npm run build:lib:lazy # \u663E\u5F0F\u6309\u9700\u5E93\u6784\u5EFA
178
+ \`\`\`
179
+
180
+ vite.config.mjs \u53EA\u5728\u8FDC\u7A0B\u5E93\u6784\u5EFA\u542F\u7528 epxShared\u3002\u5B83\u5C06\u516C\u5F00 core/component/utils/business/designer \u548C Vue \u5BFC\u5165\u8FDE\u63A5\u5230\u5BBF\u4E3B\u5171\u4EAB\u547D\u540D\u7A7A\u95F4\uFF0C\u907F\u514D\u91CD\u590D\u6253\u5305\u8FD0\u884C\u65F6\uFF1B\u4E0D\u652F\u6301\u7684\u6DF1\u8DEF\u5F84\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u9519\u3002\u5BBF\u4E3B\u5FC5\u987B\u5B89\u88C5\u76F8\u540C\u7248\u672C\u7684\u5E73\u53F0\u5305\uFF0C\u5E76\u5148\u5B8C\u6210\u5BF9\u5E94\u7EC4\u4EF6\u7EC4\u7684\u52A0\u8F7D\u3002\u770B\u677F\u8FDC\u7A0B\u5171\u4EAB\u5165\u53E3\u5C1A\u672A\u63D0\u4F9B\uFF0C\u4F7F\u7528\u770B\u677F\u7684\u8FDC\u7A0B\u4EA7\u54C1\u5E94\u7531\u5BBF\u4E3B\u63D0\u4F9B\u6CE8\u518C\u7EC4\u4EF6\u5E76\u6838\u5BF9\u6784\u5EFA\u4F9D\u8D56\u3002
181
+
182
+ \u5E93\u5165\u53E3\u4FDD\u7559\u7EC4\u4EF6\u6536\u96C6\u3001install \u5E42\u7B49\u548C runtime: vue3\u3002\u65B0\u589E\u7EC4\u4EF6\u653E\u5165 src/__DIRNAME__/ \u5373\u81EA\u52A8\u6536\u96C6\uFF1B\u4EA7\u54C1\u81EA\u6709\u8DEF\u7531\u548C store \u6A21\u5757\u5E94\u5728 install(app) \u4E2D\u6CE8\u518C\uFF0C\u5E76\u786E\u4FDD\u91CD\u590D\u5B89\u88C5\u5B89\u5168\u3002
183
+
184
+ \u6309\u9700\u4EA7\u7269\u5FC5\u987B\u4E0A\u4F20\u6574\u4E2A lib/ \u76EE\u5F55\uFF0C\u5305\u62EC chunks\u3001shims\u3001index.manifest.json\u3001index.full.js \u548C\u6837\u5F0F\u3002\u5E73\u53F0 FM_SYSTEM_WEBPACK \u4ECD\u914D\u7F6E index.js / index.css URL\uFF0Cindex.deps.json \u4E0E\u5165\u53E3\u540C\u76EE\u5F55\u90E8\u7F72\u3002\u72EC\u7ACB\u5E94\u7528\u90E8\u7F72 dist/\u3002
185
+
186
+ ## \u5B58\u91CF\u4EA7\u54C1\u5347\u7EA7
187
+
188
+ \`\`\`sh
189
+ epxing migrate . --packages-version __PACKAGES_VERSION__
190
+ epxing migrate . --packages-version __PACKAGES_VERSION__ --apply
191
+ epxing migrate . --packages-version __PACKAGES_VERSION__ --transform-vue --to-vite --apply
192
+ \`\`\`
193
+
194
+ \u9ED8\u8BA4\u53EA\u8BFB\u9884\u89C8\uFF1B--apply \u8981\u6C42 Git \u5DE5\u4F5C\u6811\u5E72\u51C0\u3002\u5347\u7EA7\u4FDD\u7559\u4E1A\u52A1\u7EC4\u4EF6\u3001\u8DEF\u7531\u3001store \u548C\u81EA\u5B9A\u4E49\u914D\u7F6E\uFF0C\u53EA\u81EA\u52A8\u6539\u5199\u786E\u5B9A\u7684\u5BFC\u5165\u53CA\u5165\u53E3\u3002\u52A8\u6001\u53D6\u503C\u3001\u672A\u77E5\u65E7\u63A5\u53E3\u3001\u672A\u652F\u6301\u7684\u6E90\u7801\u8DEF\u5F84\u8FDB\u5165 MIGRATION-REPORT.md \u4EBA\u5DE5\u6E05\u5355\uFF1B\u5B58\u5728\u65E0\u6CD5\u5B8C\u6574\u5207\u6362\u7684\u65E7\u5165\u53E3\u65F6\uFF0C\u4E0D\u6DF7\u88C5\u4E24\u5957\u8FD0\u884C\u65F6\uFF0C\u5148\u4FDD\u7559\u65E7\u6A21\u5F0F\u5E76\u5B8C\u6210\u6E05\u5355\u518D\u5347\u7EA7\u3002
195
+
196
+ Vue 2 \u8BED\u6CD5\u8F6C\u6362\u3001\u7B2C\u4E09\u65B9\u7EC4\u4EF6\u66FF\u6362\u3001\u65E5\u671F\u53C2\u6570\u3001\u4E3B\u9898\u548C\u6837\u5F0F\u9694\u79BB\u9700\u7ED3\u5408\u62A5\u544A\u590D\u6838\u3002\u6784\u5EFA\u901A\u8FC7\u540E\u4ECD\u9700\u5728\u771F\u5B9E\u540E\u7AEF\u9A8C\u6536\u767B\u5F55\u3001\u6743\u9650\u3001\u5217\u8868\u3001\u8868\u5355\u3001\u5F39\u5C42\u53CA\u5173\u952E\u6D41\u7A0B\u3002
197
+
198
+ ## \u66F4\u65B0\u7248\u672C
199
+
200
+ \`\`\`sh
201
+ npm install -g @epxing/cli@beta --registry https://registry.npmjs.org/
202
+ epxing --version
203
+ \`\`\`
204
+
205
+ \u6D4B\u8BD5\u7248\u4F7F\u7528 beta \u6807\u7B7E\uFF1B\u4EA7\u54C1\u5C06 @epxing \u5E73\u53F0\u5305\u56FA\u5B9A\u5728\u540C\u4E00\u5DF2\u9A8C\u8BC1\u7248\u672C\u3002CLI \u66F4\u65B0\u4E0D\u4F1A\u81EA\u52A8\u6539\u4EA7\u54C1\u4F9D\u8D56\uFF0C\u6309 migrate \u9884\u89C8\u3001\u5BA1\u9605\u3001\u5E94\u7528\u3001\u5B89\u88C5\u3001\u6784\u5EFA\u548C\u9A8C\u6536\u7684\u987A\u5E8F\u66F4\u65B0\u3002
206
+ `;var _=m.resolve(m.dirname(h(import.meta.url)),"../.."),r={};r["package.json"]=`{
2
207
  "name": "__NAME__",
3
208
  "version": "0.1.0",
4
209
  "runtime": "vue3",
@@ -20,7 +225,7 @@ var x=Object.defineProperty;var f=(i,a)=>x(i,"name",{value:a,configurable:!0});i
20
225
  "cross-env": "^7.0.3"
21
226
  }
22
227
  }
23
- `;n["vite.config.mjs"]=`// \u4EA7\u54C1\u9879\u76EE Vite \u5355\u914D\u7F6E\uFF1Adev \u58F3 + \u8FDC\u7A0B\u5E93 UMD \u6784\u5EFA \u4E8C\u5408\u4E00\uFF08\u5F62\u6001\u8BF4\u660E\u89C1 epx-frame \u7684 docs/PROJECT-GUIDE.md \xA7\u4E09\uFF09\u3002
228
+ `;r["vite.config.mjs"]=`// \u4EA7\u54C1\u9879\u76EE Vite \u5355\u914D\u7F6E\uFF1Adev \u58F3 + \u8FDC\u7A0B\u5E93 UMD \u6784\u5EFA \u4E8C\u5408\u4E00\uFF08\u5F62\u6001\u8BF4\u660E\u89C1 epx-frame \u7684 docs/PROJECT-GUIDE.md \xA7\u4E09\uFF09\u3002
24
229
  // npm run dev \u2192 \u8D77\u5B8C\u6574\u5E73\u53F0\u8C03\u8BD5\u4F60\u7684\u7EC4\u4EF6\uFF08:8080\uFF09
25
230
  // npm run build:lib \u2192 lib/index.js + index.css + index.deps.json\uFF08UMD\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u52A0\u8F7D\uFF09
26
231
  // \u4E09\u4E2A\u6587\u4EF6\u540C\u76EE\u5F55\u4E00\u8D77\u90E8\u7F72\uFF1Bdeps.json \u4E0D\u7528\u5355\u72EC\u914D url\uFF08\u5E73\u53F0\u6309 js url \u63A8\u5BFC\uFF09
@@ -127,7 +332,7 @@ export default defineConfig(({ mode }) => {
127
332
  }
128
333
  }
129
334
  })
130
- `;n[".env.development"]=`# dev \u58F3\u7684\u5E73\u53F0\u8FD0\u884C\u65F6\u914D\u7F6E\uFF08npm run dev \u65F6\u7531 vite \u6CE8\u5165 window.*\uFF0C\u53D8\u91CF\u542B\u4E49\u540C\u5E73\u53F0 config.js\uFF09
335
+ `;r[".env.development"]=`# dev \u58F3\u7684\u5E73\u53F0\u8FD0\u884C\u65F6\u914D\u7F6E\uFF08npm run dev \u65F6\u7531 vite \u6CE8\u5165 window.*\uFF0C\u53D8\u91CF\u542B\u4E49\u540C\u5E73\u53F0 config.js\uFF09
131
336
  # \u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF1A\u4E0D\u8981\u6539\u8FD9\u4E2A\u6587\u4EF6\uFF0C\u65B0\u5EFA .env.development.local\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\u5373\u53EF\uFF0C\u5982\uFF1A
132
337
  # IP=https://test.epxing.com:88/
133
338
  IP=https://dev.epxing.com:88/
@@ -137,7 +342,7 @@ BASE_CLIENT_ID=frame
137
342
  BASE_SYSTEM_ID=epxing-frame-manage
138
343
  BASE_APP_ID=FM_SERVICE_PLATFORM
139
344
  WITH_CREDENTIALS=false
140
- `;n["src/index.js"]=`// \u8FDC\u7A0B\u5E93\u5165\u53E3\uFF1A\u81EA\u52A8\u6536\u96C6\u5168\u90E8\u4E1A\u52A1\u7EC4\u4EF6 + install \u6CE8\u518C\uFF08\u65B0\u589E\u7EC4\u4EF6\u96F6\u767B\u8BB0\uFF09
345
+ `;r["src/index.js"]=`// \u8FDC\u7A0B\u5E93\u5165\u53E3\uFF1A\u81EA\u52A8\u6536\u96C6\u5168\u90E8\u4E1A\u52A1\u7EC4\u4EF6 + install \u6CE8\u518C\uFF08\u65B0\u589E\u7EC4\u4EF6\u96F6\u767B\u8BB0\uFF09
141
346
  // \u672C\u9879\u76EE\u6E90\u7801\u91CC\u5199\u7684 ri- \u56FE\u6807\u89C4\u5219\uFF08\u7531 vite.config \u7684 epxIcons \u751F\u6210\uFF09\u3002
142
347
  // \u4E0E UnoCSS \u7684 import 'uno.css' \u540C\u4E00\u7EA6\u5B9A\uFF1B\u4E00\u4E2A ri- \u90FD\u6CA1\u7528\u65F6\u5B83\u662F\u7A7A\u7684\uFF0C\u5F15\u5B83\u4E0D\u4EA7\u751F\u4F53\u79EF\u3002
143
348
  import 'virtual:epx-icons.css'
@@ -177,7 +382,7 @@ const install = function (app, options) {
177
382
  }
178
383
  // runtime \u968F\u6784\u5EFA\u4EA7\u7269\u4EA4\u4ED8\uFF0C\u5E73\u53F0\u636E\u6B64\u6309\u5E93\u9009\u62E9\u539F\u751F\u5B89\u88C5\u6216\u65E7\u7248\u517C\u5BB9\u3002
179
384
  export default { name, version, install, ...components, runtime: pkg.runtime }
180
- `;n["src/main.js"]=`// dev \u58F3\u5165\u53E3\uFF1A\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u767B\u5F55/\u83DC\u5355/store/router \u5168\u6709\uFF09+ \u6302\u672C\u4EA7\u54C1\u7EC4\u4EF6\u3002
385
+ `;r["src/main.js"]=`// dev \u58F3\u5165\u53E3\uFF1A\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u767B\u5F55/\u83DC\u5355/store/router \u5168\u6709\uFF09+ \u6302\u672C\u4EA7\u54C1\u7EC4\u4EF6\u3002
181
386
  // \u6309\u9700\u5F15\u7528\uFF08epx-frame \u53EF\u63D2\u62D4\u5B50\u8DEF\u5F84\uFF0C\u8BE6\u89C1 frame \u4ED3\u5E93 PROJECT-GUIDE \xA7\u4E09\uFF09\uFF1A
182
387
  // core = \u5185\u6838\uFF08createApp/store/router/\u5DE5\u5177\uFF09\uFF1Bcomponents = 113 \u4E2A\u901A\u7528\u7EC4\u4EF6\uFF1B
183
388
  // business = \u5E73\u53F0\u7BA1\u7406\u9762/\u670D\u52A1\u5927\u5385\uFF08\u5E73\u53F0\u9875\u9762\u591A\u7531\u5B83\u62FC\u6210\uFF0C\u9ED8\u8BA4\u88C5\u4E0A\uFF09\u3002
@@ -202,7 +407,7 @@ app.use(business)
202
407
  // app.use(designer); app.use(dashboard) // \u542F\u7528\u65F6\u628A\u4E0A\u9762\u5BF9\u5E94 import \u4E00\u8D77\u653E\u5F00\uFF0C\u5426\u5219 ReferenceError
203
408
  app.use(product)
204
409
  app.mount('#app')
205
- `;n["index.html"]=`<!DOCTYPE html>
410
+ `;r["index.html"]=`<!DOCTYPE html>
206
411
  <html lang="zh-CN">
207
412
  <head>
208
413
  <meta charset="utf-8">
@@ -215,7 +420,7 @@ app.mount('#app')
215
420
  <script type="module" src="/src/main.js"></script>
216
421
  </body>
217
422
  </html>
218
- `;n["src/__DIRNAME__/DemoList.vue"]=`<script>
423
+ `;r["src/__DIRNAME__/DemoList.vue"]=`<script>
219
424
  // \u793A\u4F8B\u7EC4\u4EF6\uFF1A\u7EE7\u627F\u5E73\u53F0 EntityList\uFF08\u4EA7\u54C1\u5F00\u53D1\u4E3B\u59FF\u52BF\u2014\u2014\u5148\u7EE7\u627F\u518D\u91CD\u5199\uFF0C\u89C1 PROJECT-GUIDE \xA7\u4E94\uFF09\u3002
220
425
  // \u9875\u9762\u914D\u7F6E\u91CC\u7528 component: "epx-__NAME__-demo-list" \u5373\u53EF\u6E32\u67D3\u672C\u7EC4\u4EF6\u3002\u8DD1\u901A\u540E\u53EF\u5220\u3002
221
426
  // \u6309\u9700\u5F15\u7528\u5F62\u6001\u4E0B\u4ECE\u5B50\u8DEF\u5F84\u5BFC\u5165\uFF08\u4E0E main.js \u4E00\u81F4\uFF0C\u522B\u6DF7\u7528\u805A\u5408\u5165\u53E3 'epx-frame'\uFF09\u3002
@@ -234,17 +439,21 @@ export default {
234
439
  border-radius: var(--epx-radius-base, 4px);
235
440
  }
236
441
  </style>
237
- `;n[".gitignore"]=`node_modules/
442
+ `;r[".gitignore"]=`node_modules/
238
443
  lib/
239
444
  dist/
240
445
  *.tgz
241
446
  .DS_Store
242
447
  .env*.local
243
- `;n["README.md"]='# __NAME__\n\nepx-frame \u4EA7\u54C1\u8FDC\u7A0B\u5E93\u9879\u76EE\uFF08Vite \u5F62\u6001\uFF09\u3002\u5F00\u53D1\u6307\u5357\u89C1 epx-frame \u4ED3\u5E93 `docs/PROJECT-GUIDE.md`\u3002\n\n```bash\nnpm i # \u88C5\u4F9D\u8D56\nnpm run dev # \u672C\u5730\u5F00\u53D1\uFF08:8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF0C\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\uFF09\nnpm run build:lib # \u6784\u5EFA\u8FDC\u7A0B\u5E93 lib/index.js + index.css\n```\n\n\u90E8\u7F72\uFF1Alib \u4EA7\u7269\u53D1\u5230\u6587\u4EF6\u670D\u52A1\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u7ED9\u672C\u7CFB\u7EDF\u914D js/css \u4E24\u6761 url\u3002\n`lib/index.deps.json`\uFF08\u4F9D\u8D56\u6E05\u5355\uFF09**\u8981\u548C index.js \u540C\u76EE\u5F55\u540C\u540D\u4E00\u8D77\u4F20**\uFF0C\u4F46**\u4E0D\u7528**\u5355\u72EC\u914D url\u2014\u2014\n\u5E73\u53F0\u6309 js url \u63A8\u5BFC\u5B83\uFF0C\u52A0\u8F7D\u672C\u5E93\u524D\u5148\u5907\u597D\u7528\u5230\u7684\u61D2\u52A0\u8F7D\u5E73\u53F0\u7EC4\u4EF6\uFF1B\u6F0F\u4F20\u53EA\u4F1A\u9759\u9ED8\u9000\u5316\u4E3A\u300C\u5907\u5168\u90E8\u300D\uFF08\u591A\u4E0B\u70B9 chunk\uFF09\u3002\n\u7EC4\u4EF6\u547D\u540D\uFF1A`epx-__NAME__-<\u57DF>-<\u540D>`\uFF08\u5168\u5E73\u53F0\u552F\u4E00\uFF09\uFF1B\u65B0\u589E .vue \u5373\u81EA\u52A8\u6CE8\u518C\u3002\n\n\u6846\u67B6\u5F15\u7528\u662F**\u6309\u9700\u5B50\u8DEF\u5F84**\u5F62\u6001\uFF08`epx-frame/core` + `epx-frame/components`\uFF0C\u89C1 src/main.js \u6CE8\u91CA\uFF09\uFF1A\nbusiness/designer/dashboard \u4E0D\u88C5\u4E5F\u4F1A\u5728\u8FD0\u884C\u65F6\u6309\u9700\u61D2\u52A0\u8F7D\uFF1B\u7EC4\u4EF6\u6E90\u7801\u91CC\u4E5F\u4ECE `epx-frame/components`\n\u5BFC\u5165\u7EE7\u627F\uFF08\u522B\u548C\u805A\u5408\u5165\u53E3 `epx-frame` \u6DF7\u7528\u2014\u2014\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF09\u3002\n\n## \u56FE\u6807\n\n**461 \u4E2A\u5E73\u53F0\u56FE\u6807\u76F4\u63A5\u5199\u5C31\u884C\uFF0C\u96F6\u914D\u7F6E**\u2014\u2014\u5B83\u4EEC\u968F epx-frame \u53D1\u5E03\uFF0C\u62FF\u5230\u5373\u7528\uFF1A\n\n```vue\n<i class="el-icon-search"></i>\n<i class="epx-icon-shezhi"></i>\n```\n\n`font-size` \u63A7\u5236\u5927\u5C0F\u3001`color` \u63A7\u5236\u989C\u8272\uFF08\u5E95\u5C42\u662F CSS mask + currentColor\uFF09\u3002\n\n\u60F3\u7528\u5E73\u53F0\u6CA1\u6709\u7684\u56FE\u6807\uFF0C\u76F4\u63A5\u5199 [Remix Icon](https://remixicon.com) \u7684\u540D\u5B57\uFF1A\n\n```vue\n<i class="ri-rocket-line"></i>\n```\n\n**\u8981\u5148 `npm i -D @iconify-json/ri`**\uFF083229 \u4E2A\u56FE\u6807\u7684\u6570\u636E\u6E90\uFF0C\u53EA\u5728\u6784\u5EFA\u671F\u8BFB\u4E00\u6B21\uFF0C\u4E0D\u8FDB\u4EA7\u7269\uFF09\u3002\n`vite.config.mjs` \u91CC\u7684 `epxIcons()` \u4F1A\u626B\u6E90\u7801\u3001\u53EA\u4E3A**\u4F60\u5B9E\u9645\u7528\u5230\u7684**\u90A3\u51E0\u4E2A\u751F\u6210\u89C4\u5219\u2014\u2014\n\u5199 5 \u4E2A\u5C31\u662F 5 \u4E2A\u7684\u4F53\u79EF\uFF0C\u4E0D\u4F1A\u628A 3229 \u4E2A\u90FD\u6253\u8FDB\u53BB\u3002\u540D\u5B57\u62FC\u9519\u4E86\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u51FA\u6765\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u53D8\u7A7A\u767D\u3002\n\n\u56FE\u6807\u540D\u5B58\u5728**\u6570\u636E\u5E93**\u91CC\uFF08\u83DC\u5355\u56FE\u6807\u3001\u6309\u94AE iconCls\u3001\u9875\u9762\u914D\u7F6E\uFF09\u7684\u90A3\u4E9B\uFF0C\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u2014\u2014\n\u4F46\u5E73\u53F0\u8FD0\u884C\u65F6\u4F1A\u6309\u9700\u8865\u9F50\uFF0C\u4F60\u4E0D\u7528\u505A\u4EFB\u4F55\u4E8B\u3002\u5B8C\u6574\u8BF4\u660E\u89C1 epx-frame \u4ED3\u5E93 `docs/guide/tools/icon.md`\u3002\n\n\u540E\u7AEF\u5730\u5740\u7B49\u73AF\u5883\u914D\u7F6E\u5728 `.env.development`\uFF1B\u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF0C\u65B0\u5EFA `.env.development.local`\n\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\uFF08\u5982 `IP=https://test.epxing.com:88/`\uFF09\uFF0C\u91CD\u542F dev \u751F\u6548\u3002\n\n\u521B\u5EFA\u547D\u4EE4\u5DF2\u5728 package.json \u5199\u5165 `runtime: "vue3"`\uFF0C\u5E76\u7531 src/index.js \u9ED8\u8BA4\u5BFC\u51FA\u540C\u540D\u6807\u8BC6\u3002\n\u6784\u5EFA\u90E8\u7F72\u540E\u5E73\u53F0\u6309\u5305\u9009\u62E9\u5B89\u88C5\u65B9\u5F0F\uFF1A`vue3` \u8D70\u539F\u751F\u5B89\u88C5\uFF0C`vue2` \u6216\u672A\u6807\u8BC6\u7684\u5176\u5B83\u5E93\u7EE7\u7EED\u4F7F\u7528\u517C\u5BB9\u6865\u3002\n';function E({name:i,dir:a,epxFrameSpec:l}){let d=i.toLowerCase(),t=i;if(!/^[a-z][a-z0-9-]*$/i.test(i))throw new Error(`\u4EA7\u54C1\u540D\u300C${i}\u300D\u9700\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/-`);let e=o.resolve(a);if(r.existsSync(e)&&r.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let s=l;if(r.mkdirSync(e,{recursive:!0}),!s)if(r.existsSync(o.join(m,"vite.config.mjs"))){if(!r.existsSync(o.join(m,"lib/epx-frame.common.js")))throw new Error("frame \u4ED3\u5E93 lib/ \u672A\u6784\u5EFA\u2014\u2014\u5148\u5728 frame-vue3 \u8DD1 pnpm build:component\uFF0C\u6216\u7528 --epx-frame \u6307\u5B9A\u6765\u6E90");console.log(" \u6253\u5305 epx-frame tarball\uFF08npm pack\uFF09\u2026");let p=_("npm pack --pack-destination "+JSON.stringify(e),{cwd:m,encoding:"utf8"}).trim().split(`
244
- `).pop();s="file:./"+p,console.log(" \u2713 "+p)}else s="^"+JSON.parse(r.readFileSync(o.join(m,"package.json"),"utf8")).version,console.log(` epx-frame \u4F9D\u8D56 \u2192 ${s}\uFF08\u5168\u5C40\u5B89\u88C5\u6A21\u5F0F\uFF1Bnpm i \u65F6\u9700 --registry \u516C\u53F8\u6E90\uFF09`);for(let[c,p]of Object.entries(n)){let u=o.join(e,c.replace("__DIRNAME__",t));r.mkdirSync(o.dirname(u),{recursive:!0}),r.writeFileSync(u,p.replaceAll("__NAME__",d).replaceAll("__DIRNAME__",t).replaceAll("__EPX_FRAME__",s))}return _('git init -q && git add -A && git commit -qm "epx-create: \u9879\u76EE\u521D\u59CB\u5316\uFF08Vite \u5F62\u6001\u811A\u624B\u67B6\uFF09"',{cwd:e}),console.log(`
245
- \u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),console.log(`\x1B[1m\u540E\u7EED\u6B65\u9AA4\uFF1A\x1B[0m
448
+ `;r["README.md"]='# __NAME__\n\nepx-frame \u4EA7\u54C1\u8FDC\u7A0B\u5E93\u9879\u76EE\uFF08Vite \u5F62\u6001\uFF09\u3002\u5F00\u53D1\u6307\u5357\u89C1 epx-frame \u4ED3\u5E93 `docs/PROJECT-GUIDE.md`\u3002\n\n```bash\nnpm i # \u88C5\u4F9D\u8D56\nnpm run dev # \u672C\u5730\u5F00\u53D1\uFF08:8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF0C\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\uFF09\nnpm run build:lib # \u6784\u5EFA\u8FDC\u7A0B\u5E93 lib/index.js + index.css\n```\n\n\u90E8\u7F72\uFF1Alib \u4EA7\u7269\u53D1\u5230\u6587\u4EF6\u670D\u52A1\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u7ED9\u672C\u7CFB\u7EDF\u914D js/css \u4E24\u6761 url\u3002\n`lib/index.deps.json`\uFF08\u4F9D\u8D56\u6E05\u5355\uFF09**\u8981\u548C index.js \u540C\u76EE\u5F55\u540C\u540D\u4E00\u8D77\u4F20**\uFF0C\u4F46**\u4E0D\u7528**\u5355\u72EC\u914D url\u2014\u2014\n\u5E73\u53F0\u6309 js url \u63A8\u5BFC\u5B83\uFF0C\u52A0\u8F7D\u672C\u5E93\u524D\u5148\u5907\u597D\u7528\u5230\u7684\u61D2\u52A0\u8F7D\u5E73\u53F0\u7EC4\u4EF6\uFF1B\u6F0F\u4F20\u53EA\u4F1A\u9759\u9ED8\u9000\u5316\u4E3A\u300C\u5907\u5168\u90E8\u300D\uFF08\u591A\u4E0B\u70B9 chunk\uFF09\u3002\n\u7EC4\u4EF6\u547D\u540D\uFF1A`epx-__NAME__-<\u57DF>-<\u540D>`\uFF08\u5168\u5E73\u53F0\u552F\u4E00\uFF09\uFF1B\u65B0\u589E .vue \u5373\u81EA\u52A8\u6CE8\u518C\u3002\n\n\u6846\u67B6\u5F15\u7528\u662F**\u6309\u9700\u5B50\u8DEF\u5F84**\u5F62\u6001\uFF08`epx-frame/core` + `epx-frame/components`\uFF0C\u89C1 src/main.js \u6CE8\u91CA\uFF09\uFF1A\nbusiness/designer/dashboard \u4E0D\u88C5\u4E5F\u4F1A\u5728\u8FD0\u884C\u65F6\u6309\u9700\u61D2\u52A0\u8F7D\uFF1B\u7EC4\u4EF6\u6E90\u7801\u91CC\u4E5F\u4ECE `epx-frame/components`\n\u5BFC\u5165\u7EE7\u627F\uFF08\u522B\u548C\u805A\u5408\u5165\u53E3 `epx-frame` \u6DF7\u7528\u2014\u2014\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF09\u3002\n\n## \u56FE\u6807\n\n**461 \u4E2A\u5E73\u53F0\u56FE\u6807\u76F4\u63A5\u5199\u5C31\u884C\uFF0C\u96F6\u914D\u7F6E**\u2014\u2014\u5B83\u4EEC\u968F epx-frame \u53D1\u5E03\uFF0C\u62FF\u5230\u5373\u7528\uFF1A\n\n```vue\n<i class="el-icon-search"></i>\n<i class="epx-icon-shezhi"></i>\n```\n\n`font-size` \u63A7\u5236\u5927\u5C0F\u3001`color` \u63A7\u5236\u989C\u8272\uFF08\u5E95\u5C42\u662F CSS mask + currentColor\uFF09\u3002\n\n\u60F3\u7528\u5E73\u53F0\u6CA1\u6709\u7684\u56FE\u6807\uFF0C\u76F4\u63A5\u5199 [Remix Icon](https://remixicon.com) \u7684\u540D\u5B57\uFF1A\n\n```vue\n<i class="ri-rocket-line"></i>\n```\n\n**\u8981\u5148 `npm i -D @iconify-json/ri`**\uFF083229 \u4E2A\u56FE\u6807\u7684\u6570\u636E\u6E90\uFF0C\u53EA\u5728\u6784\u5EFA\u671F\u8BFB\u4E00\u6B21\uFF0C\u4E0D\u8FDB\u4EA7\u7269\uFF09\u3002\n`vite.config.mjs` \u91CC\u7684 `epxIcons()` \u4F1A\u626B\u6E90\u7801\u3001\u53EA\u4E3A**\u4F60\u5B9E\u9645\u7528\u5230\u7684**\u90A3\u51E0\u4E2A\u751F\u6210\u89C4\u5219\u2014\u2014\n\u5199 5 \u4E2A\u5C31\u662F 5 \u4E2A\u7684\u4F53\u79EF\uFF0C\u4E0D\u4F1A\u628A 3229 \u4E2A\u90FD\u6253\u8FDB\u53BB\u3002\u540D\u5B57\u62FC\u9519\u4E86\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u51FA\u6765\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u53D8\u7A7A\u767D\u3002\n\n\u56FE\u6807\u540D\u5B58\u5728**\u6570\u636E\u5E93**\u91CC\uFF08\u83DC\u5355\u56FE\u6807\u3001\u6309\u94AE iconCls\u3001\u9875\u9762\u914D\u7F6E\uFF09\u7684\u90A3\u4E9B\uFF0C\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u2014\u2014\n\u4F46\u5E73\u53F0\u8FD0\u884C\u65F6\u4F1A\u6309\u9700\u8865\u9F50\uFF0C\u4F60\u4E0D\u7528\u505A\u4EFB\u4F55\u4E8B\u3002\u5B8C\u6574\u8BF4\u660E\u89C1 epx-frame \u4ED3\u5E93 `docs/guide/tools/icon.md`\u3002\n\n\u540E\u7AEF\u5730\u5740\u7B49\u73AF\u5883\u914D\u7F6E\u5728 `.env.development`\uFF1B\u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF0C\u65B0\u5EFA `.env.development.local`\n\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\uFF08\u5982 `IP=https://test.epxing.com:88/`\uFF09\uFF0C\u91CD\u542F dev \u751F\u6548\u3002\n\n\u521B\u5EFA\u547D\u4EE4\u5DF2\u5728 package.json \u5199\u5165 `runtime: "vue3"`\uFF0C\u5E76\u7531 src/index.js \u9ED8\u8BA4\u5BFC\u51FA\u540C\u540D\u6807\u8BC6\u3002\n\u6784\u5EFA\u90E8\u7F72\u540E\u5E73\u53F0\u6309\u5305\u9009\u62E9\u5B89\u88C5\u65B9\u5F0F\uFF1A`vue3` \u8D70\u539F\u751F\u5B89\u88C5\uFF0C`vue2` \u6216\u672A\u6807\u8BC6\u7684\u5176\u5B83\u5E93\u7EE7\u7EED\u4F7F\u7528\u517C\u5BB9\u6865\u3002\n';function j({name:i,dir:t,epxFrameSpec:o,packagesVersion:n,cliVersion:p="0.5.0-beta.1"}){let a=i.toLowerCase(),s=i;if(!/^[a-z][a-z0-9-]*$/i.test(i))throw new Error(`\u4EA7\u54C1\u540D\u300C${i}\u300D\u9700\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/-`);let e=m.resolve(t);if(n&&o)throw new Error("--packages-version \u4E0E --epx-frame \u4E0D\u80FD\u540C\u65F6\u6307\u5B9A");if(n&&!/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(n))throw new Error("--packages-version \u9700\u8981 npm \u7248\u672C\u3001\u7248\u672C\u8303\u56F4\u6216\u6807\u7B7E");if(l.existsSync(e)&&l.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let c=o;if(l.mkdirSync(e,{recursive:!0}),!c&&!n)if(l.existsSync(m.join(_,"vite.config.mjs"))){if(!l.existsSync(m.join(_,"lib/epx-frame.common.js")))throw new Error("frame \u4ED3\u5E93 lib/ \u672A\u6784\u5EFA\u2014\u2014\u5148\u5728 frame-vue3 \u8DD1 pnpm build:component\uFF0C\u6216\u7528 --epx-frame \u6307\u5B9A\u6765\u6E90");console.log(" \u6253\u5305 epx-frame tarball\uFF08npm pack\uFF09\u2026");let u=v("npm pack --pack-destination "+JSON.stringify(e),{cwd:_,encoding:"utf8"}).trim().split(`
449
+ `).pop();c="file:./"+u,console.log(" \u2713 "+u)}else c="^"+JSON.parse(l.readFileSync(m.join(_,"package.json"),"utf8")).version,console.log(` epx-frame \u4F9D\u8D56 \u2192 ${c}\uFF08\u5168\u5C40\u5B89\u88C5\u6A21\u5F0F\uFF1Bnpm i \u65F6\u9700 --registry \u516C\u53F8\u6E90\uFF09`);let E=n?g(r,n):r;for(let[f,u]of Object.entries(E)){let x=m.join(e,f.replace("__DIRNAME__",s));l.mkdirSync(m.dirname(x),{recursive:!0}),l.writeFileSync(x,u.replaceAll("__NAME__",a).replaceAll("__DIRNAME__",s).replaceAll("__EPX_FRAME__",c||"").replaceAll("__PACKAGES_VERSION__",n||"").replaceAll("__CLI_VERSION__",p))}return v('git init -q && git add -A && git commit -qm "epx-create: \u9879\u76EE\u521D\u59CB\u5316\uFF08Vite \u5F62\u6001\u811A\u624B\u67B6\uFF09"',{cwd:e}),console.log(`
450
+ \u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),n?(console.log(` npm install --prefix "${e}" --registry https://registry.npmjs.org/
451
+ cd "${e}"
452
+ npm run dev # :8080
453
+ npx epxing lib
454
+ \u8BE6\u7EC6\u4F7F\u7528\uFF1APRODUCT-GUIDE.md`),e):(console.log(`\x1B[1m\u540E\u7EED\u6B65\u9AA4\uFF1A\x1B[0m
246
455
  cd ${e}
247
456
  npm i
248
457
  npm run dev # :8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\u540E\u5F00\u53D1\u8C03\u8BD5\uFF09
249
458
  npm run build:lib # \u51FA lib/index.js + index.css + index.deps.json\uFF08\u4E09\u4E2A\u540C\u76EE\u5F55\u4E00\u8D77\u4F20\uFF09\u2192 \u90E8\u7F72 FM_SYSTEM_WEBPACK
250
- \u7EC4\u4EF6\u5199\u5728 src/${t}/\uFF08\u793A\u4F8B DemoList.vue \u8DD1\u901A\u540E\u53EF\u5220\uFF09\uFF1B\u6307\u5357\uFF1Aframe \u4ED3\u5E93 docs/PROJECT-GUIDE.md`),e}f(E,"scaffold");var b=process.argv[1]&&import.meta.url===g(process.argv[1]).href;if(b){let i=process.argv.slice(2),a=f(e=>{let s=i.indexOf(e);if(s===-1)return null;let c=i[s+1];return i.splice(s,2),c},"take"),l=a("--dir"),d=a("--epx-frame"),t=i.find(e=>!e.startsWith("-"));t||(console.error("\u7528\u6CD5\uFF1Anode tools/epx-create/scaffold.mjs <\u4EA7\u54C1\u540D> [--dir <\u76EE\u5F55>] [--epx-frame <spec>]"),process.exit(1));try{E({name:t,dir:l||o.resolve(m,"..","product",t),epxFrameSpec:d})}catch(e){console.error("\u2717 "+e.message),process.exit(1)}}export{n as TEMPLATES,E as scaffold};
459
+ \u7EC4\u4EF6\u5199\u5728 src/${s}/\uFF08\u793A\u4F8B DemoList.vue \u8DD1\u901A\u540E\u53EF\u5220\uFF09\uFF1B\u6307\u5357\uFF1Aframe \u4ED3\u5E93 docs/PROJECT-GUIDE.md`),e)}d(j,"scaffold");var w=process.argv[1]&&import.meta.url===y(process.argv[1]).href;if(w){let i=process.argv.slice(2),t=d(s=>{let e=i.indexOf(s);if(e===-1)return null;let c=i[e+1];return i.splice(e,2),c},"take"),o=t("--dir"),n=t("--epx-frame"),p=t("--packages-version"),a=i.find(s=>!s.startsWith("-"));a||(console.error("\u7528\u6CD5\uFF1Anode tools/epx-create/scaffold.mjs <\u4EA7\u54C1\u540D> [--dir <\u76EE\u5F55>] [--epx-frame <spec>]"),process.exit(1));try{j({name:a,dir:o||m.resolve(_,"..","product",a),epxFrameSpec:n,packagesVersion:p})}catch(s){console.error("\u2717 "+s.message),process.exit(1)}}export{r as TEMPLATES,j as scaffold};