@epxing/cli 0.5.0-beta.1 → 0.5.0-beta.2

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 CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  独立工程命令行工具,终端命令名为 epxing。/vite 提供产品构建插件,根入口不提供业务运行时。
4
4
 
5
- 本页对应包版本 `0.5.0-beta.1`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
5
+ 本页对应包版本 `0.5.0-beta.2`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
6
6
 
7
7
  ## 安装与使用
8
8
 
9
9
 
10
10
  ```sh
11
- npm install -g @epxing/cli@0.5.0-beta.1
11
+ npm install -g @epxing/cli@0.5.0-beta.2
12
12
  ```
13
13
 
14
14
 
@@ -18,13 +18,13 @@ epxing --version
18
18
  epxing dev --port 3000
19
19
  epxing build --mode prd
20
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
21
+ epxing create my-product
22
+ epxing migrate .
23
23
  ```
24
24
 
25
25
  ## 接入约定
26
26
 
27
- 工程命令使用当前项目已安装的依赖和脚本。--dir 指定项目目录;创建/迁移时用 --packages-version 指定 @epxing 平台包版本;--epx-frame 保留旧聚合模式,两者互斥。CLI 采用自己的版本号,独立于其余平台包。完整参数、迁移与发布说明见本包 README。
27
+ 工程命令使用当前项目已安装的依赖和脚本。--dir 指定项目目录;创建/迁移默认使用 @epxing 独立包,版本留空查询最新 beta 并固定到具体版本,没有 beta 时使用 latest。--packages-version 可指定数字版本或标签;--epx-frame 仅显式保留旧聚合模式,两者互斥。CLI 采用自己的版本号,独立于其余平台包。完整参数、迁移与发布说明见本包 README。
28
28
 
29
29
  ## 稳定子路径
30
30
 
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  [完整公开 API、导入方式与示例](./API.md)
4
4
 
5
- 独立的工程开发工具,包含交互菜单、开发服务、产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。0.5 测试版新增 `@epxing/*` 独立包产品:用 `--packages-version` 指定平台包版本,CLI 使用自己的版本号。创建和升级会生成产品使用说明;`@epxing/cli/vite` 提供产品构建插件,不依赖聚合包中的构建工具。
5
+ 独立的工程开发工具,包含交互菜单、开发服务、产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。创建和升级默认使用 `@epxing/*` 独立包,版本留空时查询最新 `beta` 并固定到具体版本,没有 `beta` 时使用 `latest`;可用 `--packages-version` 指定版本或标签。CLI 使用自己的版本号。创建和升级会生成产品使用说明;`@epxing/cli/vite` 提供产品构建插件,不依赖聚合包中的构建工具。
6
6
 
7
- 本批测试版本:`@epxing/cli@0.5.0-beta.1`,平台包 `5.3.0-beta.2`,均使用 npm 公网 `beta` 标签。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
7
+ 本批测试版本:`@epxing/cli@0.5.0-beta.2`,平台包 `5.3.0-beta.2`,均使用 npm 公网 `beta` 标签。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
8
8
 
9
- 平台包从 `5.3.0-beta.2` 起自动加载自身样式,产品无需手动引入各包的 `style.css`。创建和迁移使用此版本时,CLI 不再添加这些导入;指定旧版本或无法确定版本下限的标签时,仍保留显式样式以兼容旧包。已有显式导入可以保留,产品覆盖样式放在框架导入之后。
9
+ 平台包从 `5.3.0-beta.2` 起自动加载自身样式,产品无需手动引入各包的 `style.css`。创建和迁移使用此版本时,CLI 不再添加这些导入;指定旧版本时仍保留显式样式以兼容旧包。标签会先解析成具体版本再选择模板。已有显式导入可以保留,产品覆盖样式放在框架导入之后。
10
10
 
11
11
  ```powershell
12
12
  npm install -g @epxing/cli@beta --registry https://registry.npmjs.org/
@@ -16,16 +16,17 @@ epxing build --mode prd
16
16
  epxing lib # 产品默认懒加载;平台目录构建完整聚合组件库
17
17
  epxing lib --full # 产品完整打包
18
18
  epxing lib --lazy # 显式选择懒加载,兼容已有命令
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
19
+ epxing create my-product
20
+ epxing migrate ./old-product
21
+ epxing migrate ./old-product --apply
22
+ epxing migrate ./old-product --transform-vue --to-vite --apply
23
+ # 指定固定版本时:epxing create my-product --packages-version 5.3.0-beta.2
23
24
  epxing skill install --dir E:/products/my-product
24
25
  ```
25
26
 
26
- 从 0.4.0 起终端命令为 `epxing`,可与旧聚合 CLI 的 `epx` 共存。新产品直接依赖 `@epxing/core`、`@epxing/component`、`@epxing/utils` 等包。创建后进入目录安装依赖,再运行 `npm run dev`;默认端口 8080。工具安装阶段不会运行迁移或改产品文件。
27
+ 从 0.4.0 起终端命令为 `epxing`,可与旧聚合 CLI 的 `epx` 共存。新产品直接依赖 `@epxing/core`、`@epxing/components`、`@epxing/utils` 等包。创建后进入目录安装依赖,再运行 `npm run dev`;默认端口 8080。工具安装阶段不会运行迁移或改产品文件。
27
28
 
28
- `--epx-frame <版本或spec>` 保留旧聚合产品模式,与 `--packages-version` 互斥;需要独立包时使用新参数。无参数交互引导默认使用独立包。迁移遇到动态旧接口等无法确定的内容时返回 2,报告人工清单并保留原包模式;不会只切换一半导入。已有业务路由、store 和 install 注册代码保留;已有自定义 `PRODUCT-GUIDE.md` 会保留,另写 `EPXING-PACKAGES-GUIDE.md`。
29
+ `--epx-frame <版本或spec>` 仅用于显式选择旧聚合产品模式,与 `--packages-version` 互斥。普通命令与无参数交互引导均默认使用独立包,版本输入可直接回车。显式数字版本不查询网络;默认版本与标签需查询 npm,查询失败会退出,可通过固定版本离线生成。迁移遇到动态旧接口等无法确定的内容时返回 2,报告人工清单并保留原包模式;不会只切换一半导入。已有业务路由、store 和 install 注册代码保留;已有自定义 `PRODUCT-GUIDE.md` 会保留,另写 `EPXING-PACKAGES-GUIDE.md`。
29
30
 
30
31
  ```js
31
32
  // vite.config.mjs:由创建模板自动配置;远程库构建启用共享映射。
@@ -67,7 +68,7 @@ import epxIcons from '@epxing/icons'
67
68
 
68
69
  平台 `epxing build` 保留 `--thin`、`--no-designer`、`--no-dashboard`;产品工程不接受平台裁剪选项。需向工程脚本透传其他参数时使用 `--`,如 `epxing dev -- --host 0.0.0.0`。脚本原有的 pre/post 生命周期、自定义环境和多步构建会保留,失败退出码向上传递。
69
70
 
70
- `create` 和 `migrate --apply` 自动写入 `runtime: "vue3"`。带参数直接调用时指定 `--packages-version`(独立包)或 `--epx-frame`(旧聚合模式)。迁移默认预览;apply 要求目标 Git 工作树干净。实际执行 `.vue` 转换时才按需安装并缓存 gogocode。标识表示迁移目标,仍需完成转换、构建和业务复测。
71
+ `create` 和 `migrate --apply` 自动写入 `runtime: "vue3"`。省略版本默认选择最新独立包;`--packages-version` 可固定版本,`--epx-frame` 显式选择旧聚合模式。迁移默认预览;apply 要求目标 Git 工作树干净。实际执行 `.vue` 转换时才按需安装并缓存 gogocode。标识表示迁移目标,仍需完成转换、构建和业务复测。
71
72
 
72
73
  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`;无须重跑依赖迁移。最终产物须验证平台字号、圆角、明暗与密度切换、懒加载和样式隔离。
73
74
 
package/dist/cli.mjs CHANGED
@@ -6,6 +6,7 @@ import { spawnSync } from 'node:child_process'
6
6
  import { fileURLToPath, pathToFileURL } from 'node:url'
7
7
  import { findProject, runProject } from './project.mjs'
8
8
  import { Prompts } from './prompts.mjs'
9
+ import { resolvePlatformVersion } from './platform-version.mjs'
9
10
 
10
11
  const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
11
12
  const payload = path.join(packageRoot, 'dist')
@@ -31,8 +32,7 @@ function requireTarget (args) {
31
32
  const packagesVersion = takeOption(args, '--packages-version')
32
33
  const target = takeOption(args, '--epx-frame')
33
34
  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) }
35
+ return { value: packagesVersion || target, independent: !target }
36
36
  }
37
37
 
38
38
  function runTool (script, args, cwd) {
@@ -85,13 +85,13 @@ async function interactive (cwd, action) {
85
85
  if (action === 'help') return dispatch(['help'])
86
86
  if (action === 'create') {
87
87
  const name = await prompts.required('产品名或目标路径')
88
- const target = await prompts.required('目标 @epxing 包版本', '5.3.0-beta.1')
88
+ const target = await prompts.text('目标 @epxing 包版本(留空使用最新 beta)')
89
89
  const dir = await prompts.text('生成目录', name)
90
- return dispatch(['create', name, '--dir', dir, '--packages-version', target])
90
+ return dispatch(['create', name, '--dir', dir, ...(target ? ['--packages-version', target] : [])])
91
91
  }
92
92
  if (action === 'migrate') {
93
93
  const dir = await prompts.required('待升级工程目录', '.')
94
- const target = await prompts.required('目标 @epxing 包版本', '5.3.0-beta.1')
94
+ const target = await resolvePlatformVersion(await prompts.text('目标 @epxing 包版本(留空使用最新 beta)'))
95
95
  const flags = await prompts.select('迁移范围', choices([
96
96
  ['依赖与入口迁移', []], ['依赖、入口与 Vue 组件转换', ['--transform-vue']],
97
97
  ['依赖、Vue 组件及 Vite 构建迁移', ['--transform-vue', '--to-vite']]
@@ -175,8 +175,8 @@ export async function main (argv = process.argv.slice(2), cwd = process.env.INIT
175
175
  epxing lib [--full | --lazy] [-m <模式>] [--dir <目录>] 产品默认懒加载,--full 完整打包;平台聚合库保持完整
176
176
  epxing build --lib 同 epxing lib
177
177
  epxing preview [-p <端口>] [--dir <目录>]
178
- epxing create <名称|路径> --packages-version <平台包版本> [--dir <目录>]
179
- epxing migrate [项目目录] --packages-version <平台包版本> [--apply] [--transform-vue] [--to-vite]
178
+ epxing create <名称|路径> [--packages-version <平台包版本>] [--dir <目录>]
179
+ epxing migrate [项目目录] [--packages-version <平台包版本>] [--apply] [--transform-vue] [--to-vite]
180
180
  epxing scan [项目目录]
181
181
  epxing theme [项目目录] [--apply] 主题变量补修,默认只读;迁移时自动执行
182
182
  epxing verify [项目目录] [--online <线上JS地址|文件>]
@@ -189,7 +189,8 @@ export async function main (argv = process.argv.slice(2), cwd = process.env.INIT
189
189
 
190
190
  dev / build / lib 等执行当前工程的 package.json 脚本,使用工程本地依赖。
191
191
  工程命令可用 -- 后的参数透传给脚本;serve / upgrade 分别是 dev / migrate 的别名。
192
- create、migrate 不带参数时进入独立包引导;直接带参数时 --packages-version 必填。
192
+ create、migrate 默认使用 @epxing/core、@epxing/components 等独立包。
193
+ 版本留空时查询最新 beta 并固定具体版本;没有 beta 时使用 latest。可用 --packages-version 固定版本或指定标签。
193
194
  --epx-frame <版本或spec> 保留旧聚合模式,与 --packages-version 互斥。
194
195
  创建和升级自动写入 runtime: "vue3"。迁移默认 dry-run,--apply 才落盘。
195
196
  工具不会自动安装平台依赖;.vue 转换工具仅在执行 --apply --transform-vue 时下载并缓存。`)
@@ -207,11 +208,12 @@ create、migrate 不带参数时进入独立包引导;直接带参数时 --pac
207
208
  const target = requireTarget(args)
208
209
  const chosenDir = takeOption(args, '--dir')
209
210
  const nameOrPath = args.shift()
210
- if (!nameOrPath || args.length || nameOrPath.startsWith('-')) throw new Error('用法:epxing create <名称|路径> --epx-frame <目标版本> [--dir <目录>]')
211
+ if (!nameOrPath || args.length || nameOrPath.startsWith('-')) throw new Error('用法:epxing create <名称|路径> [--packages-version <版本>] [--dir <目录>]')
211
212
  const dir = path.resolve(cwd, chosenDir || nameOrPath)
212
213
  const name = /[\\/]/.test(nameOrPath) ? path.basename(path.resolve(cwd, nameOrPath)) : nameOrPath
213
214
  const { scaffold } = await import(pathToFileURL(path.join(payload, 'tools/epx-create/scaffold.mjs')).href)
214
215
  const cliVersion = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')).version
216
+ if (target.independent) target.value = await resolvePlatformVersion(target.value)
215
217
  scaffold({ name, dir, ...(target.independent ? { packagesVersion: target.value } : { epxFrameSpec: target.value }), cliVersion })
216
218
  return 0
217
219
  }
@@ -221,6 +223,7 @@ create、migrate 不带参数时进入独立包引导;直接带参数时 --pac
221
223
  if (dirs.length > 1) throw new Error('一次迁移一个项目目录')
222
224
  const dir = dirs[0] || '.'
223
225
  const cliVersion = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')).version
226
+ if (target.independent) target.value = await resolvePlatformVersion(target.value)
224
227
  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)
225
228
  }
226
229
  if (command === 'theme') {
@@ -0,0 +1,23 @@
1
+ /* eslint-disable no-console -- 输出已选择的平台版本 */
2
+ // 测试阶段默认使用 beta;显式版本不访问网络,标签解析后固定到具体版本。
3
+ export async function resolvePlatformVersion (spec, registry = process.env.npm_config_registry || 'https://registry.npmjs.org/') {
4
+ if (spec && !/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(spec)) throw new Error('--packages-version 需要 npm 版本、版本范围或标签')
5
+ if (spec && /^[~^]?\d/.test(spec)) return spec
6
+ const tag = spec || 'beta'
7
+ try {
8
+ const response = await globalThis.fetch(new URL('@epxing%2fcore', registry.endsWith('/') ? registry : registry + '/'), {
9
+ headers: { accept: 'application/vnd.npm.install-v1+json', 'cache-control': 'no-cache' },
10
+ signal: globalThis.AbortSignal.timeout(15000)
11
+ })
12
+ if (!response.ok) throw new Error(`npm 返回 HTTP ${response.status}`)
13
+ const metadata = await response.json()
14
+ const tags = metadata['dist-tags'] || {}
15
+ const selectedTag = tags[tag] ? tag : !spec ? 'latest' : tag
16
+ const version = tags[selectedTag]
17
+ if (!version || !/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(version)) throw new Error(`npm 中没有可用的 ${tag} 版本`)
18
+ console.log(`平台独立包版本:${version}(${selectedTag})`)
19
+ return version
20
+ } catch (error) {
21
+ throw new Error(`无法查询 @epxing/core 的 ${tag} 版本:${error.message}。请检查 npm 源和网络,或用 --packages-version 指定具体版本。`)
22
+ }
23
+ }
@@ -1,2 +1,2 @@
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(`
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(`
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"./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(`
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(`
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,4 @@
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)+`
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 S,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/components/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/components":"__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
2
  `,"vite.config.mjs":`import path from 'node:path'
3
3
  import { fileURLToPath } from 'node:url'
4
4
  import { createRequire } from 'node:module'
@@ -49,7 +49,7 @@ export default defineConfig(({ command, mode }) => {
49
49
  }
50
50
  })
51
51
  `,"src/main.js":`import { createApp } from '@epxing/core'
52
- import Components from '@epxing/component'
52
+ import Components from '@epxing/components'
53
53
  import Business from '@epxing/business'
54
54
  import '@epxing/theme'
55
55
  import App from './App.vue'
@@ -77,7 +77,7 @@ const count = ref(0)
77
77
  .product-start { padding: var(--epx-space-4, 24px); color: var(--epx-text); }
78
78
  </style>
79
79
  `,"src/__DIRNAME__/DemoList.vue":`<script>
80
- import { EntityList } from '@epxing/component'
80
+ import { EntityList } from '@epxing/components'
81
81
  export default {
82
82
  name: 'epx-__NAME__-demo-list',
83
83
  extends: EntityList
@@ -103,14 +103,16 @@ npm run build:app
103
103
  \`\`\`
104
104
 
105
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(`
106
+ `,"PRODUCT-GUIDE.md":h};if(!A(t)){let n=I.map(p=>`import '${p}'`).join(`
107
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
108
+ `+n)}return o}d(g,"createPackageTemplates");var h=`# \u4EA7\u54C1\u5F00\u53D1\u4E0E\u5347\u7EA7\u4F7F\u7528\u8BF4\u660E
109
109
 
110
110
  <!-- epxing-generated-product-guide -->
111
111
 
112
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
113
 
114
+ \u521B\u5EFA\u6216\u5347\u7EA7\u65F6\u4E0D\u586B\u7248\u672C\uFF0CCLI \u81EA\u52A8\u9009\u62E9\u6700\u65B0 beta\uFF08\u6CA1\u6709 beta \u65F6\u4F7F\u7528 latest\uFF09\uFF0C\u5E76\u5C06\u5177\u4F53\u7248\u672C\u5199\u5165\u4F9D\u8D56\u3002\u9700\u8981\u590D\u73B0\u6307\u5B9A\u7248\u672C\u65F6\u4F7F\u7528 --packages-version\uFF1B\u57FA\u7840\u7EC4\u4EF6\u7EDF\u4E00\u4ECE @epxing/components \u5BFC\u5165\u3002
115
+
114
116
  ## \u5B89\u88C5\u4E0E\u542F\u52A8
115
117
 
116
118
  \`\`\`sh
@@ -118,13 +120,13 @@ npm install --registry https://registry.npmjs.org/
118
120
  npm run dev
119
121
  \`\`\`
120
122
 
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
123
+ \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
124
 
123
125
  ## \u5E94\u7528\u5165\u53E3
124
126
 
125
127
  \`\`\`js
126
128
  import { createApp } from '@epxing/core'
127
- import Components from '@epxing/component'
129
+ import Components from '@epxing/components'
128
130
  import Business from '@epxing/business'
129
131
  import '@epxing/theme'
130
132
  import App from './App.vue'
@@ -148,7 +150,7 @@ createApp \u8FD4\u56DE Vue App\uFF0C\u9ED8\u8BA4\u521B\u5EFA\u72EC\u7ACB store\u
148
150
  ## \u7EC4\u4EF6\u4E0E\u5DE5\u5177
149
151
 
150
152
  \`\`\`js
151
- import { EntityList, AddForm, AddFormItem } from '@epxing/component'
153
+ import { EntityList, AddForm, AddFormItem } from '@epxing/components'
152
154
  import { UserFind, EntityTreeManage } from '@epxing/business'
153
155
  import { mixins, getSystemMeta, getFileUrl, http, createFieldFactory } from '@epxing/core'
154
156
  import { cloneDeep, moment, resolvePlaceholders, storage } from '@epxing/utils'
@@ -165,7 +167,7 @@ export default {
165
167
 
166
168
  \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
169
 
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
170
+ \u5404\u5305 API.md \u968F\u5B89\u88C5\u5305\u63D0\u4F9B\uFF0C\u53EF\u5728 node_modules/@epxing/<\u5305\u540D>/API.md \u67E5\u770B\u3002\u57FA\u7840\u7EC4\u4EF6\u7EDF\u4E00\u4F7F\u7528 @epxing/components\uFF0C\u65B0\u4EE3\u7801\u4F7F\u7528\u6839\u5BFC\u51FA\u53CA\u7A33\u5B9A\u5B50\u8DEF\u5F84\u3002
169
171
 
170
172
  ## \u72EC\u7ACB\u5E94\u7528\u4E0E\u8FDC\u7A0B\u4EA7\u54C1\u5E93
171
173
 
@@ -186,9 +188,10 @@ vite.config.mjs \u53EA\u5728\u8FDC\u7A0B\u5E93\u6784\u5EFA\u542F\u7528 epxShared
186
188
  ## \u5B58\u91CF\u4EA7\u54C1\u5347\u7EA7
187
189
 
188
190
  \`\`\`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
191
+ epxing migrate .
192
+ epxing migrate . --apply
193
+ epxing migrate . --transform-vue --to-vite --apply
194
+ # \u56FA\u5B9A\u5230\u5F53\u524D\u7248\u672C\uFF1Aepxing migrate . --packages-version __PACKAGES_VERSION__
192
195
  \`\`\`
193
196
 
194
197
  \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
@@ -203,7 +206,7 @@ epxing --version
203
206
  \`\`\`
204
207
 
205
208
  \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"]=`{
209
+ `;var _=m.resolve(m.dirname(S(import.meta.url)),"../.."),r={};r["package.json"]=`{
207
210
  "name": "__NAME__",
208
211
  "version": "0.1.0",
209
212
  "runtime": "vue3",
@@ -445,7 +448,7 @@ dist/
445
448
  *.tgz
446
449
  .DS_Store
447
450
  .env*.local
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(`
451
+ `;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.2"}){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
452
  `).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
453
  \u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),n?(console.log(` npm install --prefix "${e}" --registry https://registry.npmjs.org/
451
454
  cd "${e}"
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as u}from"../chunks/HSJSTJH6.mjs";import{b as x}from"../chunks/QL4QZFQT.mjs";import"../chunks/6CGUHPTB.mjs";import{a as m}from"../chunks/H4POBCHI.mjs";import n from"node:fs";import c from"node:path";var r=process.argv.slice(2).find(e=>!e.startsWith("--"));(!r||!n.existsSync(r))&&(console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/detect-vue3-risks.mjs <\u9879\u76EE\u76EE\u5F55>"),process.exit(1));var f=[],h=m(e=>{for(let s of n.readdirSync(e,{withFileTypes:!0})){let i=c.join(e,s.name);s.isDirectory()&&!/node_modules|\.git|^lib$|^dist$/.test(s.name)?h(i):/\.(?:vue|[cm]?js|jsx|ts|tsx)$/.test(s.name)&&f.push(i)}},"walk"),l=c.join(r,"src");n.existsSync(l)&&h(l);var o=[];for(let e of f){let s=n.readFileSync(e,"utf8"),i=c.relative(r,e),a=u(s,{filename:e});for(let t of a.fixes)o.push({file:`${i}:${t.line}`,rule:"R2-date-format",detail:`${t.before} \u2192 ${t.after}\uFF1B\u6267\u884C\u65E5\u671F\u683C\u5F0F\u4FEE\u590D\u5668 --apply\uFF1B\u539F\u751FVue3\u5305\u4E0D\u8D70\u65E7render\u57AB\u7247\uFF08F21\uFF09`});for(let t of a.warnings)o.push({file:i,rule:"R2-date-format\u5F85\u8FFD\u8E2A",detail:t});let $=/<template[>\s]/.test(s),p=/\bextends:\s*(\w+)/.exec(s),d=(/<style[^>]*\bscoped\b[^>]*>([\s\S]*?)<\/style>/.exec(s)||[])[1]||"";if(d&&p&&!$){let t=d.match(/^[ \t]*\.[\w-][^{}\n]*\{/gm)||[];t.length&&o.push({file:i,rule:"R1-scoped\u5F85\u590D\u6838",detail:`extends ${p[1]} + <style scoped> + \u65E0 <template>\uFF0C\u4E14 scoped \u5757\u542B ${t.length} \u4E2A\u88F8\u7C7B\u9009\u62E9\u5668\uFF08\u5982 ${t[0].trim()}\uFF09\u3002\u4EC5\u63D0\u793A\u5F85\u590D\u6838\uFF0C\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF1B\u5148\u4FDD\u7559 scoped\uFF0C\u7528\u6700\u7EC8\u4EA7\u7269\u9A8C\u8BC1 DOM \u4E0E CSS \u5339\u914D\u3002\u82E5\u786E\u9700\u53BB scoped\uFF0C\u987B\u540C\u65F6\u5B8C\u6210\u552F\u4E00\u547D\u540D\u7A7A\u95F4\u9694\u79BB\uFF0C\u5E76\u590D\u6D4B\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u548C\u5176\u4ED6\u9875\u9762\uFF1B\u4E0D\u8981\u4E3A\u6D88\u9664\u544A\u8B66\u6279\u91CF\u6539\u6837\u5F0F`})}}if(n.existsSync(l))for(let e of x(r)){for(let s of e.fixes)o.push({file:`${e.file}:${s.line}`,rule:"R3-theme",detail:`${s.before} \u2192 ${s.after}\uFF1B\u6267\u884C epxing theme <\u76EE\u5F55> --apply\uFF0C\u6216\u5728\u8FC1\u79FB\u65F6\u81EA\u52A8\u9002\u914D\uFF08E2\uFF09`});for(let s of e.warnings)o.push({file:e.file,rule:"R3-theme\u5F85\u590D\u6838",detail:s})}console.log(`[detect-vue3-risks] \u626B\u63CF ${f.length} \u4E2A\u7EC4\u4EF6/\u811A\u672C\u6587\u4EF6\u53CA src \u6837\u5F0F\u6587\u4EF6`);o.length===0&&(console.log(" \u2713 \u672A\u53D1\u73B0\u5DF2\u77E5\u9759\u6001\u98CE\u9669\u6A21\u5F0F"),process.exit(0));console.log(` \u26A0 \u53D1\u73B0 ${o.length} \u5904\u5F85\u590D\u6838\u98CE\u9669\u6A21\u5F0F\uFF08\u9759\u6001\u547D\u4E2D\u4E0D\u4EE3\u8868\u8FD0\u884C\u65F6\u5DF2\u5931\u6548\uFF09\uFF1A`);for(let e of o)console.log(` [${e.rule}] ${e.file}
2
+ import{a as u}from"../chunks/AMQWUBTZ.mjs";import{b as x}from"../chunks/PP5RD4RH.mjs";import"../chunks/SH6LMMHZ.mjs";import{a as m}from"../chunks/H4POBCHI.mjs";import n from"node:fs";import c from"node:path";var r=process.argv.slice(2).find(e=>!e.startsWith("--"));(!r||!n.existsSync(r))&&(console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/detect-vue3-risks.mjs <\u9879\u76EE\u76EE\u5F55>"),process.exit(1));var f=[],h=m(e=>{for(let s of n.readdirSync(e,{withFileTypes:!0})){let i=c.join(e,s.name);s.isDirectory()&&!/node_modules|\.git|^lib$|^dist$/.test(s.name)?h(i):/\.(?:vue|[cm]?js|jsx|ts|tsx)$/.test(s.name)&&f.push(i)}},"walk"),l=c.join(r,"src");n.existsSync(l)&&h(l);var o=[];for(let e of f){let s=n.readFileSync(e,"utf8"),i=c.relative(r,e),a=u(s,{filename:e});for(let t of a.fixes)o.push({file:`${i}:${t.line}`,rule:"R2-date-format",detail:`${t.before} \u2192 ${t.after}\uFF1B\u6267\u884C\u65E5\u671F\u683C\u5F0F\u4FEE\u590D\u5668 --apply\uFF1B\u539F\u751FVue3\u5305\u4E0D\u8D70\u65E7render\u57AB\u7247\uFF08F21\uFF09`});for(let t of a.warnings)o.push({file:i,rule:"R2-date-format\u5F85\u8FFD\u8E2A",detail:t});let $=/<template[>\s]/.test(s),p=/\bextends:\s*(\w+)/.exec(s),d=(/<style[^>]*\bscoped\b[^>]*>([\s\S]*?)<\/style>/.exec(s)||[])[1]||"";if(d&&p&&!$){let t=d.match(/^[ \t]*\.[\w-][^{}\n]*\{/gm)||[];t.length&&o.push({file:i,rule:"R1-scoped\u5F85\u590D\u6838",detail:`extends ${p[1]} + <style scoped> + \u65E0 <template>\uFF0C\u4E14 scoped \u5757\u542B ${t.length} \u4E2A\u88F8\u7C7B\u9009\u62E9\u5668\uFF08\u5982 ${t[0].trim()}\uFF09\u3002\u4EC5\u63D0\u793A\u5F85\u590D\u6838\uFF0C\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF1B\u5148\u4FDD\u7559 scoped\uFF0C\u7528\u6700\u7EC8\u4EA7\u7269\u9A8C\u8BC1 DOM \u4E0E CSS \u5339\u914D\u3002\u82E5\u786E\u9700\u53BB scoped\uFF0C\u987B\u540C\u65F6\u5B8C\u6210\u552F\u4E00\u547D\u540D\u7A7A\u95F4\u9694\u79BB\uFF0C\u5E76\u590D\u6D4B\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u548C\u5176\u4ED6\u9875\u9762\uFF1B\u4E0D\u8981\u4E3A\u6D88\u9664\u544A\u8B66\u6279\u91CF\u6539\u6837\u5F0F`})}}if(n.existsSync(l))for(let e of x(r)){for(let s of e.fixes)o.push({file:`${e.file}:${s.line}`,rule:"R3-theme",detail:`${s.before} \u2192 ${s.after}\uFF1B\u6267\u884C epxing theme <\u76EE\u5F55> --apply\uFF0C\u6216\u5728\u8FC1\u79FB\u65F6\u81EA\u52A8\u9002\u914D\uFF08E2\uFF09`});for(let s of e.warnings)o.push({file:e.file,rule:"R3-theme\u5F85\u590D\u6838",detail:s})}console.log(`[detect-vue3-risks] \u626B\u63CF ${f.length} \u4E2A\u7EC4\u4EF6/\u811A\u672C\u6587\u4EF6\u53CA src \u6837\u5F0F\u6587\u4EF6`);o.length===0&&(console.log(" \u2713 \u672A\u53D1\u73B0\u5DF2\u77E5\u9759\u6001\u98CE\u9669\u6A21\u5F0F"),process.exit(0));console.log(` \u26A0 \u53D1\u73B0 ${o.length} \u5904\u5F85\u590D\u6838\u98CE\u9669\u6A21\u5F0F\uFF08\u9759\u6001\u547D\u4E2D\u4E0D\u4EE3\u8868\u8FD0\u884C\u65F6\u5DF2\u5931\u6548\uFF09\uFF1A`);for(let e of o)console.log(` [${e.rule}] ${e.file}
3
3
  ${e.detail}`);process.exit(2);
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{b as t}from"../chunks/HSJSTJH6.mjs";import"../chunks/6CGUHPTB.mjs";import"../chunks/H4POBCHI.mjs";import l from"node:fs";import i from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!l.existsSync(i.join(n,"src")))console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/fix-date-formats.mjs <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=t(i.resolve(n),{apply:s});console.log(`[\u65E5\u671F\u683C\u5F0F ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u52A8\u6001/\u89E3\u6790\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u8FFD\u8E2A\uFF1A"+e)}r.some(o=>o.warnings.length)&&(process.exitCode=2)}
2
+ import{b as t}from"../chunks/AMQWUBTZ.mjs";import"../chunks/SH6LMMHZ.mjs";import"../chunks/H4POBCHI.mjs";import l from"node:fs";import i from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!l.existsSync(i.join(n,"src")))console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/fix-date-formats.mjs <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=t(i.resolve(n),{apply:s});console.log(`[\u65E5\u671F\u683C\u5F0F ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u52A8\u6001/\u89E3\u6790\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u8FFD\u8E2A\uFF1A"+e)}r.some(o=>o.warnings.length)&&(process.exitCode=2)}
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{b as l}from"../chunks/QL4QZFQT.mjs";import"../chunks/6CGUHPTB.mjs";import"../chunks/H4POBCHI.mjs";import i from"node:fs";import t from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!i.existsSync(t.join(n,"src")))console.error("\u7528\u6CD5\uFF1Aepxing theme <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=l(t.resolve(n),{apply:s});console.log(`[\u4E3B\u9898\u9002\u914D ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u5F85\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u590D\u6838\uFF1A"+e)}console.log("\u4FDD\u7559 scoped\uFF1B\u4E0D\u6CE8\u5165\u5168\u5C40\u4E3B\u9898\u3002\u53D1\u5E03\u524D\u7528\u6700\u7EC8\u4EA7\u7269\u5207\u6362\u5E73\u53F0\u5B57\u53F7\u3001\u5706\u89D2\u3001\u660E\u6697\u4E3B\u9898\uFF0C\u5E76\u68C0\u67E5\u7EC4\u4EF6\u5916\u5143\u7D20\u3002"),r.some(o=>o.warnings.length)&&(process.exitCode=2)}
2
+ import{b as l}from"../chunks/PP5RD4RH.mjs";import"../chunks/SH6LMMHZ.mjs";import"../chunks/H4POBCHI.mjs";import i from"node:fs";import t from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!i.existsSync(t.join(n,"src")))console.error("\u7528\u6CD5\uFF1Aepxing theme <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=l(t.resolve(n),{apply:s});console.log(`[\u4E3B\u9898\u9002\u914D ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u5F85\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u590D\u6838\uFF1A"+e)}console.log("\u4FDD\u7559 scoped\uFF1B\u4E0D\u6CE8\u5165\u5168\u5C40\u4E3B\u9898\u3002\u53D1\u5E03\u524D\u7528\u6700\u7EC8\u4EA7\u7269\u5207\u6362\u5E73\u53F0\u5B57\u53F7\u3001\u5706\u89D2\u3001\u660E\u6697\u4E3B\u9898\uFF0C\u5E76\u68C0\u67E5\u7EC4\u4EF6\u5916\u5143\u7D20\u3002"),r.some(o=>o.warnings.length)&&(process.exitCode=2)}