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