@epxing/cli 0.5.0-beta.1 → 0.5.0-beta.3
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 +5 -5
- package/README.md +11 -10
- package/dist/cli.mjs +12 -9
- package/dist/platform-version.mjs +48 -0
- package/dist/tools/chunks/{HSJSTJH6.mjs → AMQWUBTZ.mjs} +1 -1
- package/dist/tools/chunks/{QL4QZFQT.mjs → PP5RD4RH.mjs} +1 -1
- package/dist/tools/epx-create/scaffold.mjs +17 -14
- package/dist/tools/epx-migrate/detect-vue3-risks.mjs +1 -1
- package/dist/tools/epx-migrate/fix-date-formats.mjs +1 -1
- package/dist/tools/epx-migrate/fix-theme-styles.mjs +1 -1
- package/dist/tools/epx-migrate/migrate.mjs +74 -71
- package/dist/vite.mjs +2 -2
- package/package.json +8 -6
- /package/dist/tools/chunks/{6CGUHPTB.mjs → SH6LMMHZ.mjs} +0 -0
package/API.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
独立工程命令行工具,终端命令名为 epxing。/vite 提供产品构建插件,根入口不提供业务运行时。
|
|
4
4
|
|
|
5
|
-
本页对应包版本 `0.5.0-beta.
|
|
5
|
+
本页对应包版本 `0.5.0-beta.3`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
|
|
6
6
|
|
|
7
7
|
## 安装与使用
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
```sh
|
|
11
|
-
npm install -g @epxing/cli@0.5.0-beta.
|
|
11
|
+
npm install -g @epxing/cli@0.5.0-beta.3
|
|
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
|
|
22
|
-
epxing migrate .
|
|
21
|
+
epxing create my-product
|
|
22
|
+
epxing migrate .
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## 接入约定
|
|
26
26
|
|
|
27
|
-
工程命令使用当前项目已安装的依赖和脚本。--dir
|
|
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
|
|
5
|
+
独立的工程开发工具,包含交互菜单、开发服务、产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。创建和升级默认使用 `@epxing/*` 独立包,版本留空时查询最新 `beta` 并固定到具体版本,没有 `beta` 时使用 `latest`;可用 `--packages-version` 指定版本或标签。CLI 使用自己的版本号。创建和升级会生成产品使用说明;`@epxing/cli/vite` 提供产品构建插件,不依赖聚合包中的构建工具。
|
|
6
6
|
|
|
7
|
-
本批测试版本:`@epxing/cli@0.5.0-beta.
|
|
7
|
+
本批测试版本:`@epxing/cli@0.5.0-beta.3`,平台包 `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
|
|
20
|
-
epxing migrate
|
|
21
|
-
epxing migrate
|
|
22
|
-
epxing migrate
|
|
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/
|
|
27
|
+
从 0.4.0 起终端命令为 `epxing`,可与旧聚合 CLI 的 `epx` 共存。新产品直接依赖 `@epxing/core`、`@epxing/components`、`@epxing/utils` 等包。创建后进入目录安装依赖,再运行 `npm run dev`;默认端口 8080。工具安装阶段不会运行迁移或改产品文件。
|
|
27
28
|
|
|
28
|
-
`--epx-frame <版本或spec>`
|
|
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"
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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 <名称|路径> --
|
|
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,48 @@
|
|
|
1
|
+
/* eslint-disable no-console -- 输出已选择的平台版本 */
|
|
2
|
+
import http from 'node:http'
|
|
3
|
+
import https from 'node:https'
|
|
4
|
+
|
|
5
|
+
// Node 20 的双栈自动连接在部分 Windows 网络超时,查询 npm 时固定使用 IPv4。
|
|
6
|
+
function readMetadata (url) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const client = url.protocol === 'http:' ? http : https
|
|
9
|
+
const request = client.get(url, {
|
|
10
|
+
family: 4,
|
|
11
|
+
headers: { accept: 'application/vnd.npm.install-v1+json', 'cache-control': 'no-cache' },
|
|
12
|
+
timeout: 15000
|
|
13
|
+
}, response => {
|
|
14
|
+
if (response.statusCode !== 200) {
|
|
15
|
+
response.resume()
|
|
16
|
+
reject(new Error(`npm 返回 HTTP ${response.statusCode}`))
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
let body = ''
|
|
20
|
+
response.setEncoding('utf8')
|
|
21
|
+
response.on('data', chunk => { body += chunk })
|
|
22
|
+
response.on('error', reject)
|
|
23
|
+
response.on('end', () => {
|
|
24
|
+
try { resolve(JSON.parse(body)) } catch (error) { reject(error) }
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
request.on('timeout', () => request.destroy(new Error('npm 请求超时')))
|
|
28
|
+
request.on('error', reject)
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// 测试阶段默认使用 beta;显式版本不访问网络,标签解析后固定到具体版本。
|
|
33
|
+
export async function resolvePlatformVersion (spec, registry = process.env.npm_config_registry || 'https://registry.npmjs.org/') {
|
|
34
|
+
if (spec && !/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(spec)) throw new Error('--packages-version 需要 npm 版本、版本范围或标签')
|
|
35
|
+
if (spec && /^[~^]?\d/.test(spec)) return spec
|
|
36
|
+
const tag = spec || 'beta'
|
|
37
|
+
try {
|
|
38
|
+
const metadata = await readMetadata(new URL('@epxing%2fcore', registry.endsWith('/') ? registry : registry + '/'))
|
|
39
|
+
const tags = metadata['dist-tags'] || {}
|
|
40
|
+
const selectedTag = tags[tag] ? tag : !spec ? 'latest' : tag
|
|
41
|
+
const version = tags[selectedTag]
|
|
42
|
+
if (!version || !/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(version)) throw new Error(`npm 中没有可用的 ${tag} 版本`)
|
|
43
|
+
console.log(`平台独立包版本:${version}(${selectedTag})`)
|
|
44
|
+
return version
|
|
45
|
+
} catch (error) {
|
|
46
|
+
throw new Error(`无法查询 @epxing/core 的 ${tag} 版本:${error.message}。请检查 npm 源和网络,或用 --packages-version 指定具体版本。`)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as A,b as C}from"./
|
|
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"./
|
|
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
|
|
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/
|
|
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/
|
|
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":
|
|
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
|
|
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
|
|
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/
|
|
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/
|
|
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\
|
|
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 .
|
|
190
|
-
epxing migrate . --
|
|
191
|
-
epxing migrate . --
|
|
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(
|
|
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.
|
|
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.3"}){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/
|
|
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/
|
|
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/
|
|
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)}
|