@epxing/cli 0.5.0-beta.0 → 0.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +5 -5
- package/README.md +12 -9
- package/dist/cli.mjs +12 -9
- package/dist/platform-version.mjs +23 -0
- package/dist/tools/epx-create/scaffold.mjs +33 -30
- package/dist/tools/epx-migrate/migrate.mjs +77 -74
- package/dist/vite.mjs +2 -2
- package/package.json +2 -2
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.2`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
|
|
6
6
|
|
|
7
7
|
## 安装与使用
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
```sh
|
|
11
|
-
npm install -g @epxing/cli
|
|
11
|
+
npm install -g @epxing/cli@0.5.0-beta.2
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
|
|
@@ -18,13 +18,13 @@ epxing --version
|
|
|
18
18
|
epxing dev --port 3000
|
|
19
19
|
epxing build --mode prd
|
|
20
20
|
epxing lib
|
|
21
|
-
epxing create my-product
|
|
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,9 +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.2`,平台包 `5.3.0-beta.2`,均使用 npm 公网 `beta` 标签。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
|
|
8
|
+
|
|
9
|
+
平台包从 `5.3.0-beta.2` 起自动加载自身样式,产品无需手动引入各包的 `style.css`。创建和迁移使用此版本时,CLI 不再添加这些导入;指定旧版本时仍保留显式样式以兼容旧包。标签会先解析成具体版本再选择模板。已有显式导入可以保留,产品覆盖样式放在框架导入之后。
|
|
8
10
|
|
|
9
11
|
```powershell
|
|
10
12
|
npm install -g @epxing/cli@beta --registry https://registry.npmjs.org/
|
|
@@ -14,16 +16,17 @@ epxing build --mode prd
|
|
|
14
16
|
epxing lib # 产品默认懒加载;平台目录构建完整聚合组件库
|
|
15
17
|
epxing lib --full # 产品完整打包
|
|
16
18
|
epxing lib --lazy # 显式选择懒加载,兼容已有命令
|
|
17
|
-
epxing create my-product
|
|
18
|
-
epxing migrate
|
|
19
|
-
epxing migrate
|
|
20
|
-
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
|
|
21
24
|
epxing skill install --dir E:/products/my-product
|
|
22
25
|
```
|
|
23
26
|
|
|
24
|
-
从 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。工具安装阶段不会运行迁移或改产品文件。
|
|
25
28
|
|
|
26
|
-
`--epx-frame <版本或spec>`
|
|
29
|
+
`--epx-frame <版本或spec>` 仅用于显式选择旧聚合产品模式,与 `--packages-version` 互斥。普通命令与无参数交互引导均默认使用独立包,版本输入可直接回车。显式数字版本不查询网络;默认版本与标签需查询 npm,查询失败会退出,可通过固定版本离线生成。迁移遇到动态旧接口等无法确定的内容时返回 2,报告人工清单并保留原包模式;不会只切换一半导入。已有业务路由、store 和 install 注册代码保留;已有自定义 `PRODUCT-GUIDE.md` 会保留,另写 `EPXING-PACKAGES-GUIDE.md`。
|
|
27
30
|
|
|
28
31
|
```js
|
|
29
32
|
// vite.config.mjs:由创建模板自动配置;远程库构建启用共享映射。
|
|
@@ -65,7 +68,7 @@ import epxIcons from '@epxing/icons'
|
|
|
65
68
|
|
|
66
69
|
平台 `epxing build` 保留 `--thin`、`--no-designer`、`--no-dashboard`;产品工程不接受平台裁剪选项。需向工程脚本透传其他参数时使用 `--`,如 `epxing dev -- --host 0.0.0.0`。脚本原有的 pre/post 生命周期、自定义环境和多步构建会保留,失败退出码向上传递。
|
|
67
70
|
|
|
68
|
-
`create` 和 `migrate --apply` 自动写入 `runtime: "vue3"
|
|
71
|
+
`create` 和 `migrate --apply` 自动写入 `runtime: "vue3"`。省略版本默认选择最新独立包;`--packages-version` 可固定版本,`--epx-frame` 显式选择旧聚合模式。迁移默认预览;apply 要求目标 Git 工作树干净。实际执行 `.vue` 转换时才按需安装并缓存 gogocode。标识表示迁移目标,仍需完成转换、构建和业务复测。
|
|
69
72
|
|
|
70
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`;无须重跑依赖迁移。最终产物须验证平台字号、圆角、明暗与密度切换、懒加载和样式隔离。
|
|
71
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,23 @@
|
|
|
1
|
+
/* eslint-disable no-console -- 输出已选择的平台版本 */
|
|
2
|
+
// 测试阶段默认使用 beta;显式版本不访问网络,标签解析后固定到具体版本。
|
|
3
|
+
export async function resolvePlatformVersion (spec, registry = process.env.npm_config_registry || 'https://registry.npmjs.org/') {
|
|
4
|
+
if (spec && !/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(spec)) throw new Error('--packages-version 需要 npm 版本、版本范围或标签')
|
|
5
|
+
if (spec && /^[~^]?\d/.test(spec)) return spec
|
|
6
|
+
const tag = spec || 'beta'
|
|
7
|
+
try {
|
|
8
|
+
const response = await globalThis.fetch(new URL('@epxing%2fcore', registry.endsWith('/') ? registry : registry + '/'), {
|
|
9
|
+
headers: { accept: 'application/vnd.npm.install-v1+json', 'cache-control': 'no-cache' },
|
|
10
|
+
signal: globalThis.AbortSignal.timeout(15000)
|
|
11
|
+
})
|
|
12
|
+
if (!response.ok) throw new Error(`npm 返回 HTTP ${response.status}`)
|
|
13
|
+
const metadata = await response.json()
|
|
14
|
+
const tags = metadata['dist-tags'] || {}
|
|
15
|
+
const selectedTag = tags[tag] ? tag : !spec ? 'latest' : tag
|
|
16
|
+
const version = tags[selectedTag]
|
|
17
|
+
if (!version || !/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(version)) throw new Error(`npm 中没有可用的 ${tag} 版本`)
|
|
18
|
+
console.log(`平台独立包版本:${version}(${selectedTag})`)
|
|
19
|
+
return version
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new Error(`无法查询 @epxing/core 的 ${tag} 版本:${error.message}。请检查 npm 源和网络,或用 --packages-version 指定具体版本。`)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
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 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,12 +49,9 @@ 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
|
-
import '@epxing/core/style.css'
|
|
56
|
-
import '@epxing/component/style.css'
|
|
57
|
-
import '@epxing/business/style.css'
|
|
58
55
|
import App from './App.vue'
|
|
59
56
|
import product from './index'
|
|
60
57
|
|
|
@@ -80,7 +77,7 @@ const count = ref(0)
|
|
|
80
77
|
.product-start { padding: var(--epx-space-4, 24px); color: var(--epx-text); }
|
|
81
78
|
</style>
|
|
82
79
|
`,"src/__DIRNAME__/DemoList.vue":`<script>
|
|
83
|
-
import { EntityList } from '@epxing/
|
|
80
|
+
import { EntityList } from '@epxing/components'
|
|
84
81
|
export default {
|
|
85
82
|
name: 'epx-__NAME__-demo-list',
|
|
86
83
|
extends: EntityList
|
|
@@ -106,12 +103,16 @@ npm run build:app
|
|
|
106
103
|
\`\`\`
|
|
107
104
|
|
|
108
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
|
|
109
|
-
`,"PRODUCT-GUIDE.md":
|
|
106
|
+
`,"PRODUCT-GUIDE.md":h};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 h=`# \u4EA7\u54C1\u5F00\u53D1\u4E0E\u5347\u7EA7\u4F7F\u7528\u8BF4\u660E
|
|
110
109
|
|
|
111
110
|
<!-- epxing-generated-product-guide -->
|
|
112
111
|
|
|
113
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
|
|
114
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
|
+
|
|
115
116
|
## \u5B89\u88C5\u4E0E\u542F\u52A8
|
|
116
117
|
|
|
117
118
|
\`\`\`sh
|
|
@@ -119,18 +120,15 @@ npm install --registry https://registry.npmjs.org/
|
|
|
119
120
|
npm run dev
|
|
120
121
|
\`\`\`
|
|
121
122
|
|
|
122
|
-
\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
|
|
123
124
|
|
|
124
125
|
## \u5E94\u7528\u5165\u53E3
|
|
125
126
|
|
|
126
127
|
\`\`\`js
|
|
127
128
|
import { createApp } from '@epxing/core'
|
|
128
|
-
import Components from '@epxing/
|
|
129
|
+
import Components from '@epxing/components'
|
|
129
130
|
import Business from '@epxing/business'
|
|
130
131
|
import '@epxing/theme'
|
|
131
|
-
import '@epxing/core/style.css'
|
|
132
|
-
import '@epxing/component/style.css'
|
|
133
|
-
import '@epxing/business/style.css'
|
|
134
132
|
import App from './App.vue'
|
|
135
133
|
import product from './index'
|
|
136
134
|
|
|
@@ -143,12 +141,16 @@ app.mount('#app')
|
|
|
143
141
|
|
|
144
142
|
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
|
|
145
143
|
|
|
144
|
+
\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
|
|
145
|
+
|
|
146
|
+
\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
|
|
147
|
+
|
|
146
148
|
\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
149
|
|
|
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'
|
|
@@ -163,9 +165,9 @@ export default {
|
|
|
163
165
|
|
|
164
166
|
\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
167
|
|
|
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\u5B89\u88C5\u63D2\u4EF6\
|
|
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
|
|
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",
|
|
@@ -225,7 +228,7 @@ epxing --version
|
|
|
225
228
|
"cross-env": "^7.0.3"
|
|
226
229
|
}
|
|
227
230
|
}
|
|
228
|
-
`;
|
|
231
|
+
`;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
|
|
229
232
|
// npm run dev \u2192 \u8D77\u5B8C\u6574\u5E73\u53F0\u8C03\u8BD5\u4F60\u7684\u7EC4\u4EF6\uFF08:8080\uFF09
|
|
230
233
|
// npm run build:lib \u2192 lib/index.js + index.css + index.deps.json\uFF08UMD\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u52A0\u8F7D\uFF09
|
|
231
234
|
// \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
|
|
@@ -332,7 +335,7 @@ export default defineConfig(({ mode }) => {
|
|
|
332
335
|
}
|
|
333
336
|
}
|
|
334
337
|
})
|
|
335
|
-
`;
|
|
338
|
+
`;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
|
|
336
339
|
# \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
|
|
337
340
|
# IP=https://test.epxing.com:88/
|
|
338
341
|
IP=https://dev.epxing.com:88/
|
|
@@ -342,7 +345,7 @@ BASE_CLIENT_ID=frame
|
|
|
342
345
|
BASE_SYSTEM_ID=epxing-frame-manage
|
|
343
346
|
BASE_APP_ID=FM_SERVICE_PLATFORM
|
|
344
347
|
WITH_CREDENTIALS=false
|
|
345
|
-
`;
|
|
348
|
+
`;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
|
|
346
349
|
// \u672C\u9879\u76EE\u6E90\u7801\u91CC\u5199\u7684 ri- \u56FE\u6807\u89C4\u5219\uFF08\u7531 vite.config \u7684 epxIcons \u751F\u6210\uFF09\u3002
|
|
347
350
|
// \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
|
|
348
351
|
import 'virtual:epx-icons.css'
|
|
@@ -382,7 +385,7 @@ const install = function (app, options) {
|
|
|
382
385
|
}
|
|
383
386
|
// 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
|
|
384
387
|
export default { name, version, install, ...components, runtime: pkg.runtime }
|
|
385
|
-
`;
|
|
388
|
+
`;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
|
|
386
389
|
// \u6309\u9700\u5F15\u7528\uFF08epx-frame \u53EF\u63D2\u62D4\u5B50\u8DEF\u5F84\uFF0C\u8BE6\u89C1 frame \u4ED3\u5E93 PROJECT-GUIDE \xA7\u4E09\uFF09\uFF1A
|
|
387
390
|
// core = \u5185\u6838\uFF08createApp/store/router/\u5DE5\u5177\uFF09\uFF1Bcomponents = 113 \u4E2A\u901A\u7528\u7EC4\u4EF6\uFF1B
|
|
388
391
|
// 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
|
|
@@ -407,7 +410,7 @@ app.use(business)
|
|
|
407
410
|
// app.use(designer); app.use(dashboard) // \u542F\u7528\u65F6\u628A\u4E0A\u9762\u5BF9\u5E94 import \u4E00\u8D77\u653E\u5F00\uFF0C\u5426\u5219 ReferenceError
|
|
408
411
|
app.use(product)
|
|
409
412
|
app.mount('#app')
|
|
410
|
-
`;
|
|
413
|
+
`;r["index.html"]=`<!DOCTYPE html>
|
|
411
414
|
<html lang="zh-CN">
|
|
412
415
|
<head>
|
|
413
416
|
<meta charset="utf-8">
|
|
@@ -420,7 +423,7 @@ app.mount('#app')
|
|
|
420
423
|
<script type="module" src="/src/main.js"></script>
|
|
421
424
|
</body>
|
|
422
425
|
</html>
|
|
423
|
-
`;
|
|
426
|
+
`;r["src/__DIRNAME__/DemoList.vue"]=`<script>
|
|
424
427
|
// \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
|
|
425
428
|
// \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
|
|
426
429
|
// \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
|
|
@@ -439,15 +442,15 @@ export default {
|
|
|
439
442
|
border-radius: var(--epx-radius-base, 4px);
|
|
440
443
|
}
|
|
441
444
|
</style>
|
|
442
|
-
`;
|
|
445
|
+
`;r[".gitignore"]=`node_modules/
|
|
443
446
|
lib/
|
|
444
447
|
dist/
|
|
445
448
|
*.tgz
|
|
446
449
|
.DS_Store
|
|
447
450
|
.env*.local
|
|
448
|
-
`;
|
|
449
|
-
`).pop();
|
|
450
|
-
\u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),
|
|
451
|
+
`;r["README.md"]='# __NAME__\n\nepx-frame \u4EA7\u54C1\u8FDC\u7A0B\u5E93\u9879\u76EE\uFF08Vite \u5F62\u6001\uFF09\u3002\u5F00\u53D1\u6307\u5357\u89C1 epx-frame \u4ED3\u5E93 `docs/PROJECT-GUIDE.md`\u3002\n\n```bash\nnpm i # \u88C5\u4F9D\u8D56\nnpm run dev # \u672C\u5730\u5F00\u53D1\uFF08:8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF0C\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\uFF09\nnpm run build:lib # \u6784\u5EFA\u8FDC\u7A0B\u5E93 lib/index.js + index.css\n```\n\n\u90E8\u7F72\uFF1Alib \u4EA7\u7269\u53D1\u5230\u6587\u4EF6\u670D\u52A1\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u7ED9\u672C\u7CFB\u7EDF\u914D js/css \u4E24\u6761 url\u3002\n`lib/index.deps.json`\uFF08\u4F9D\u8D56\u6E05\u5355\uFF09**\u8981\u548C index.js \u540C\u76EE\u5F55\u540C\u540D\u4E00\u8D77\u4F20**\uFF0C\u4F46**\u4E0D\u7528**\u5355\u72EC\u914D url\u2014\u2014\n\u5E73\u53F0\u6309 js url \u63A8\u5BFC\u5B83\uFF0C\u52A0\u8F7D\u672C\u5E93\u524D\u5148\u5907\u597D\u7528\u5230\u7684\u61D2\u52A0\u8F7D\u5E73\u53F0\u7EC4\u4EF6\uFF1B\u6F0F\u4F20\u53EA\u4F1A\u9759\u9ED8\u9000\u5316\u4E3A\u300C\u5907\u5168\u90E8\u300D\uFF08\u591A\u4E0B\u70B9 chunk\uFF09\u3002\n\u7EC4\u4EF6\u547D\u540D\uFF1A`epx-__NAME__-<\u57DF>-<\u540D>`\uFF08\u5168\u5E73\u53F0\u552F\u4E00\uFF09\uFF1B\u65B0\u589E .vue \u5373\u81EA\u52A8\u6CE8\u518C\u3002\n\n\u6846\u67B6\u5F15\u7528\u662F**\u6309\u9700\u5B50\u8DEF\u5F84**\u5F62\u6001\uFF08`epx-frame/core` + `epx-frame/components`\uFF0C\u89C1 src/main.js \u6CE8\u91CA\uFF09\uFF1A\nbusiness/designer/dashboard \u4E0D\u88C5\u4E5F\u4F1A\u5728\u8FD0\u884C\u65F6\u6309\u9700\u61D2\u52A0\u8F7D\uFF1B\u7EC4\u4EF6\u6E90\u7801\u91CC\u4E5F\u4ECE `epx-frame/components`\n\u5BFC\u5165\u7EE7\u627F\uFF08\u522B\u548C\u805A\u5408\u5165\u53E3 `epx-frame` \u6DF7\u7528\u2014\u2014\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF09\u3002\n\n## \u56FE\u6807\n\n**461 \u4E2A\u5E73\u53F0\u56FE\u6807\u76F4\u63A5\u5199\u5C31\u884C\uFF0C\u96F6\u914D\u7F6E**\u2014\u2014\u5B83\u4EEC\u968F epx-frame \u53D1\u5E03\uFF0C\u62FF\u5230\u5373\u7528\uFF1A\n\n```vue\n<i class="el-icon-search"></i>\n<i class="epx-icon-shezhi"></i>\n```\n\n`font-size` \u63A7\u5236\u5927\u5C0F\u3001`color` \u63A7\u5236\u989C\u8272\uFF08\u5E95\u5C42\u662F CSS mask + currentColor\uFF09\u3002\n\n\u60F3\u7528\u5E73\u53F0\u6CA1\u6709\u7684\u56FE\u6807\uFF0C\u76F4\u63A5\u5199 [Remix Icon](https://remixicon.com) \u7684\u540D\u5B57\uFF1A\n\n```vue\n<i class="ri-rocket-line"></i>\n```\n\n**\u8981\u5148 `npm i -D @iconify-json/ri`**\uFF083229 \u4E2A\u56FE\u6807\u7684\u6570\u636E\u6E90\uFF0C\u53EA\u5728\u6784\u5EFA\u671F\u8BFB\u4E00\u6B21\uFF0C\u4E0D\u8FDB\u4EA7\u7269\uFF09\u3002\n`vite.config.mjs` \u91CC\u7684 `epxIcons()` \u4F1A\u626B\u6E90\u7801\u3001\u53EA\u4E3A**\u4F60\u5B9E\u9645\u7528\u5230\u7684**\u90A3\u51E0\u4E2A\u751F\u6210\u89C4\u5219\u2014\u2014\n\u5199 5 \u4E2A\u5C31\u662F 5 \u4E2A\u7684\u4F53\u79EF\uFF0C\u4E0D\u4F1A\u628A 3229 \u4E2A\u90FD\u6253\u8FDB\u53BB\u3002\u540D\u5B57\u62FC\u9519\u4E86\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u51FA\u6765\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u53D8\u7A7A\u767D\u3002\n\n\u56FE\u6807\u540D\u5B58\u5728**\u6570\u636E\u5E93**\u91CC\uFF08\u83DC\u5355\u56FE\u6807\u3001\u6309\u94AE iconCls\u3001\u9875\u9762\u914D\u7F6E\uFF09\u7684\u90A3\u4E9B\uFF0C\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u2014\u2014\n\u4F46\u5E73\u53F0\u8FD0\u884C\u65F6\u4F1A\u6309\u9700\u8865\u9F50\uFF0C\u4F60\u4E0D\u7528\u505A\u4EFB\u4F55\u4E8B\u3002\u5B8C\u6574\u8BF4\u660E\u89C1 epx-frame \u4ED3\u5E93 `docs/guide/tools/icon.md`\u3002\n\n\u540E\u7AEF\u5730\u5740\u7B49\u73AF\u5883\u914D\u7F6E\u5728 `.env.development`\uFF1B\u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF0C\u65B0\u5EFA `.env.development.local`\n\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\uFF08\u5982 `IP=https://test.epxing.com:88/`\uFF09\uFF0C\u91CD\u542F dev \u751F\u6548\u3002\n\n\u521B\u5EFA\u547D\u4EE4\u5DF2\u5728 package.json \u5199\u5165 `runtime: "vue3"`\uFF0C\u5E76\u7531 src/index.js \u9ED8\u8BA4\u5BFC\u51FA\u540C\u540D\u6807\u8BC6\u3002\n\u6784\u5EFA\u90E8\u7F72\u540E\u5E73\u53F0\u6309\u5305\u9009\u62E9\u5B89\u88C5\u65B9\u5F0F\uFF1A`vue3` \u8D70\u539F\u751F\u5B89\u88C5\uFF0C`vue2` \u6216\u672A\u6807\u8BC6\u7684\u5176\u5B83\u5E93\u7EE7\u7EED\u4F7F\u7528\u517C\u5BB9\u6865\u3002\n';function j({name:i,dir:t,epxFrameSpec:o,packagesVersion:n,cliVersion:p="0.5.0-beta.2"}){let a=i.toLowerCase(),s=i;if(!/^[a-z][a-z0-9-]*$/i.test(i))throw new Error(`\u4EA7\u54C1\u540D\u300C${i}\u300D\u9700\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/-`);let e=m.resolve(t);if(n&&o)throw new Error("--packages-version \u4E0E --epx-frame \u4E0D\u80FD\u540C\u65F6\u6307\u5B9A");if(n&&!/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(n))throw new Error("--packages-version \u9700\u8981 npm \u7248\u672C\u3001\u7248\u672C\u8303\u56F4\u6216\u6807\u7B7E");if(l.existsSync(e)&&l.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let c=o;if(l.mkdirSync(e,{recursive:!0}),!c&&!n)if(l.existsSync(m.join(_,"vite.config.mjs"))){if(!l.existsSync(m.join(_,"lib/epx-frame.common.js")))throw new Error("frame \u4ED3\u5E93 lib/ \u672A\u6784\u5EFA\u2014\u2014\u5148\u5728 frame-vue3 \u8DD1 pnpm build:component\uFF0C\u6216\u7528 --epx-frame \u6307\u5B9A\u6765\u6E90");console.log(" \u6253\u5305 epx-frame tarball\uFF08npm pack\uFF09\u2026");let u=v("npm pack --pack-destination "+JSON.stringify(e),{cwd:_,encoding:"utf8"}).trim().split(`
|
|
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(`
|
|
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}"
|
|
452
455
|
npm run dev # :8080
|
|
453
456
|
npx epxing lib
|
|
@@ -456,4 +459,4 @@ dist/
|
|
|
456
459
|
npm i
|
|
457
460
|
npm run dev # :8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\u540E\u5F00\u53D1\u8C03\u8BD5\uFF09
|
|
458
461
|
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
|
|
459
|
-
\u7EC4\u4EF6\u5199\u5728 src/${
|
|
462
|
+
\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};
|