@epxing/cli 0.0.0-stage → 0.1.0

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.
@@ -0,0 +1,248 @@
1
+ var x=Object.defineProperty;var f=(i,a)=>x(i,"name",{value:a,configurable:!0});import r from"node:fs";import o from"node:path";import{execSync as _}from"node:child_process";import{fileURLToPath as v,pathToFileURL as g}from"node:url";var m=o.resolve(o.dirname(v(import.meta.url)),"../.."),n={};n["package.json"]=`{
2
+ "name": "__NAME__",
3
+ "version": "0.1.0",
4
+ "runtime": "vue3",
5
+ "private": true,
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build:lib": "vite build",
9
+ "build:lib:lazy": "cross-env LAZY_LIB=true vite build"
10
+ },
11
+ "dependencies": {
12
+ "epx-frame": "__EPX_FRAME__"
13
+ },
14
+ "devDependencies": {
15
+ "vite": "^6.0.0",
16
+ "@vitejs/plugin-vue": "^5.2.1",
17
+ "@vitejs/plugin-vue-jsx": "^4.1.1",
18
+ "sass": "^1.83.3",
19
+ "@element-plus/icons-vue": "^2.3.1",
20
+ "cross-env": "^7.0.3"
21
+ }
22
+ }
23
+ `;n["vite.config.mjs"]=`// \u4EA7\u54C1\u9879\u76EE Vite \u5355\u914D\u7F6E\uFF1Adev \u58F3 + \u8FDC\u7A0B\u5E93 UMD \u6784\u5EFA \u4E8C\u5408\u4E00\uFF08\u5F62\u6001\u8BF4\u660E\u89C1 epx-frame \u7684 docs/PROJECT-GUIDE.md \xA7\u4E09\uFF09\u3002
24
+ // npm run dev \u2192 \u8D77\u5B8C\u6574\u5E73\u53F0\u8C03\u8BD5\u4F60\u7684\u7EC4\u4EF6\uFF08:8080\uFF09
25
+ // npm run build:lib \u2192 lib/index.js + index.css + index.deps.json\uFF08UMD\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u52A0\u8F7D\uFF09
26
+ // \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
27
+ import fs from 'node:fs'
28
+ import path from 'node:path'
29
+ import { fileURLToPath } from 'node:url'
30
+ import { defineConfig, loadEnv } from 'vite'
31
+ import vue from '@vitejs/plugin-vue'
32
+ import vueJsx from '@vitejs/plugin-vue-jsx'
33
+ import pkg from './package.json' with { type: 'json' }
34
+ import frameDeps from 'epx-frame/build/vite-plugin-frame-deps.mjs'
35
+ import epxIcons from 'epx-frame/build/vite-plugin-icons.mjs'
36
+ import lazyLib from 'epx-frame/build/vite-plugin-lazy-lib.mjs'
37
+
38
+ const __dirname = path.dirname(fileURLToPath(import.meta.url))
39
+
40
+ // dev \u58F3\u7684\u5E73\u53F0\u8FD0\u884C\u65F6\u914D\u7F6E\uFF08window.IP \u7B49\uFF09\uFF0C\u5168\u90E8\u6765\u81EA .env*\u2014\u2014\u4E0E\u5E73\u53F0\u90E8\u7F72\u6001 js/config.js \u540C\u4E00\u5957\u53D8\u91CF\u3002
41
+ // \u6539\u540E\u7AEF\u5730\u5740\uFF1A\u65B0\u5EFA .env.development.local \u5199\u4E00\u884C IP=...\uFF08.local \u4E0D\u8FDB git\uFF0C\u89C1 .env.development \u6CE8\u91CA\uFF09
42
+ const CONFIG_KEYS = ['IP', 'BASE_URL', 'BASE_PROJECT_NAME', 'BASE_AUTH_NAME', 'BASE_CLIENT_ID',
43
+ 'BASE_SYSTEM_ID', 'BASE_APP_ID', 'ROUTER_MODE', 'MINIO_FILE_URL', 'WITH_CREDENTIALS', 'BMAP_AK', 'TMAP_AK']
44
+
45
+ export default defineConfig(({ mode }) => {
46
+ const env = loadEnv(mode, __dirname, '')
47
+ return {
48
+ resolve: { alias: { '@': path.resolve(__dirname, 'src') } },
49
+ server: { port: 8080 },
50
+ plugins: [
51
+ vue(),
52
+ // \u4EA7\u51FA <bundle>.deps.json\uFF1A\u5E73\u53F0\u52A0\u8F7D\u672C\u8FDC\u7A0B\u5E93\u524D\u636E\u6B64\u81EA\u52A8 ensure \u7528\u5230\u7684\u61D2\u52A0\u8F7D\u7EC4\u4EF6\uFF0C
53
+ // \u8FDC\u7A0B\u4FA7\u65E0\u9700\u624B\u5199 await window.frame.ensure()\u3002\u8BE6\u89C1 epx-frame \u7684 docs/WINDOW-FRAME-ABI.md\u3002
54
+ frameDeps(),
55
+ // \u6253\u5305\u5F62\u6001\uFF1A\u9ED8\u8BA4\u6574\u4F53\u5355\u4F53\uFF08\u4E0E\u5386\u53F2\u4E00\u81F4\uFF09\u3002npm run build:lib:lazy \u5207\u5230
56
+ // \u300C\u6E05\u5355 + \u7EC4\u4EF6\u6309\u9700\u52A0\u8F7D\u300D\u2014\u2014\u4EA7\u7269\u591A\u51FA chunks/ shims/ index.full.js index.manifest.json\uFF0C
57
+ // \u90E8\u7F72\u65F6\u5FC5\u987B\u4E0A\u4F20**\u6574\u4E2A lib/ \u76EE\u5F55**\uFF08\u4E0D\u518D\u662F index.js + index.css \u4E24\u4E2A\u6587\u4EF6\uFF09\u3002
58
+ lazyLib({ enabled: process.env.LAZY_LIB === 'true', glob: './__DIRNAME__/**/*.vue', pkgName: pkg.name }),
59
+ // \u56FE\u6807\uFF1A461 \u4E2A\u5E73\u53F0\u540D\uFF08el-icon-* / epx-icon-*\uFF09\u968F epx-frame \u8D70\u3001\u62FF\u5230\u5373\u7528\uFF0C\u4E0D\u7528\u7BA1\u8FD9\u4E2A\u63D2\u4EF6\u3002
60
+ // \u5B83\u53EA\u7BA1\u4F60\u5728**\u672C\u9879\u76EE\u6E90\u7801\u91CC**\u76F4\u63A5\u5199\u7684 Remix \u56FE\u6807\uFF08ri-xxx\uFF09\u2014\u2014\u5E73\u53F0\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u4F60\u7684\u6E90\u7801\uFF0C
61
+ // \u4E0D\u751F\u6210\u89C4\u5219\u5C31\u662F\u7A7A\u767D\u3002\u96F6\u6210\u672C\uFF1A\u4E00\u4E2A ri- \u90FD\u6CA1\u5199\u65F6\u4EA7\u7269\u4E00\u4E2A\u5B57\u8282\u4E0D\u6DA8\u3002
62
+ // \u8981\u7528 ri- \u56FE\u6807\u5148 npm i -D @iconify-json/ri\uFF08\u6CA1\u88C5\u5374\u5199\u4E86\u4F1A\u6709\u660E\u786E\u62A5\u9519\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u6D88\u5931\uFF09\u3002
63
+ epxIcons(),
64
+ vueJsx(), // <script lang="jsx">\uFF08renderColumn \u7B49 JSX\uFF09
65
+ {
66
+ // window \u914D\u7F6E\u6CE8\u5165\uFF1Ahead \u91CC\u751F\u6210\u4E00\u6BB5\u666E\u901A <script>\uFF0C\u4FDD\u8BC1\u5148\u4E8E\u6A21\u5757\u5165\u53E3\u6267\u884C\uFF08\u5E73\u53F0 js/config.js \u7684 dev \u7B49\u4EF7\u7269\uFF09
67
+ name: 'inject-window-config',
68
+ transformIndexHtml () {
69
+ const lines = CONFIG_KEYS.map(k => {
70
+ if (k === 'WITH_CREDENTIALS') return 'window.' + k + ' = ' + (env[k] || 'false')
71
+ if (k === 'IP') return 'window.IP = ' + JSON.stringify(env.IP || '') + " || window.location.origin + '/'"
72
+ return 'window.' + k + ' = ' + JSON.stringify(env[k] || '')
73
+ })
74
+ lines.push('window.MINIO_IP = window.IP')
75
+ return [{ tag: 'script', children: lines.join('\\n'), injectTo: 'head-prepend' }]
76
+ }
77
+ },
78
+ {
79
+ // \u5E73\u53F0\u8FD0\u884C\u65F6\u6309\u9700 <script>/\u9759\u6001\u8D44\u6E90\uFF08/js/echarts.min.js\u3001/img/*\u3001/cmaps\u3001/luckysheet \u7B49\uFF09
80
+ // \u5728\u4EA7\u54C1\u58F3\u91CC\u6CA1\u6709\u5BF9\u5E94 public \u6587\u4EF6\u2014\u2014\u76F4\u63A5\u4ECE epx-frame \u5305\u5185 lib/ \u63D0\u4F9B\uFF08\u968F\u5305\u5206\u53D1\uFF09\uFF0C
81
+ // \u5426\u5219\u56FE\u8868\u7B49\u80FD\u529B\u5728 dev \u58F3\u91CC 404\u3002
82
+ name: 'epx-frame-runtime-assets',
83
+ configureServer (server) {
84
+ const libRoot = path.resolve(__dirname, 'node_modules/epx-frame/lib')
85
+ const MIME = { '.js': 'text/javascript', '.css': 'text/css', '.png': 'image/png', '.jpg': 'image/jpeg', '.gif': 'image/gif', '.svg': 'image/svg+xml', '.woff': 'font/woff', '.woff2': 'font/woff2', '.ttf': 'font/ttf', '.json': 'application/json' }
86
+ server.middlewares.use((req, res, next) => {
87
+ const url = decodeURIComponent((req.url || '').split('?')[0])
88
+ if (!/^\\/(js|img|font|cmaps|luckysheet)\\//.test(url)) return next()
89
+ const file = path.join(libRoot, url)
90
+ if (!file.startsWith(libRoot) || !fs.existsSync(file) || !fs.statSync(file).isFile()) return next()
91
+ res.setHeader('Content-Type', MIME[path.extname(file).toLowerCase()] || 'application/octet-stream')
92
+ fs.createReadStream(file).pipe(res)
93
+ })
94
+ }
95
+ }
96
+ ],
97
+ css: {
98
+ preprocessorOptions: {
99
+ scss: { // \u4E3B\u9898 mixins \u5168\u5C40\u6CE8\u5165\uFF08\u6362\u80A4 @include \u53EF\u7528\uFF0C\u7981\u6B62\u786C\u7F16\u7801\u4E3B\u9898\u8272\uFF09
100
+ // \u4E3B\u9898 mixins \u76F4\u5F15 epx-frame \u5305\u5185\u5355\u4E00\u771F\u6E90\uFF08\u4E0D\u62F7\u8D1D\u8FDB\u9879\u76EE\u2014\u2014\u907F\u514D\u4E0E\u6846\u67B6\u7248\u672C\u6F02\u79FB\uFF0C
101
+ // \u6846\u67B6\u5347\u7EA7 mixins \u65F6 npm \u91CD\u88C5\u5373\u751F\u6548\uFF09
102
+ additionalData: '@import "' + path.resolve(__dirname, 'node_modules/epx-frame/packages/theme/src/theme/utils/mixins.scss').replace(/\\\\/g, '/') + '";',
103
+ quietDeps: true,
104
+ silenceDeprecations: ['import', 'legacy-js-api', 'global-builtin']
105
+ }
106
+ }
107
+ },
108
+ build: {
109
+ outDir: 'lib',
110
+ lib: {
111
+ entry: path.resolve(__dirname, 'src/index.js'),
112
+ name: \`library.\${pkg.name}\`, // \u2192 window.library.__NAME__\uFF0C\u5E73\u53F0\u6309\u5B83\u627E\u5230\u4F60
113
+ formats: ['umd'],
114
+ fileName: () => 'index.js'
115
+ },
116
+ rollupOptions: {
117
+ // vue/epx-frame(\u542B\u5B50\u8DEF\u5F84)/EP/bpmn \u5168\u7531\u5E73\u53F0\u8FD0\u884C\u65F6\u63D0\u4F9B\uFF0C\u7EDD\u4E0D\u6253\u8FDB\u4EA7\u7269
118
+ external: ['vue', 'epx-frame', /^epx-frame\\//, /^element-plus/, /^element-ui/, /^bpmn/],
119
+ output: {
120
+ // vue \u2192 window.frame.Vue\uFF1Bepx-frame \u53CA\u5168\u90E8\u5B50\u8DEF\u5F84 \u2192 window.epxFrame\uFF08\u540C\u4E00 Frame \u5BF9\u8C61\uFF0C
121
+ // \u5404\u5B50\u8DEF\u5F84\u7684\u7EC4\u4EF6\u8868\u5728\u5E73\u53F0\u8FD0\u884C\u65F6\u5DF2 attach \u5230\u5B83\u4E0A\u9762\uFF09
122
+ globals: (id) => (id === 'vue' ? 'frame.Vue' : (id === 'epx-frame' || id.startsWith('epx-frame/') ? 'epxFrame' : undefined)),
123
+ exports: 'default', // window.library.__NAME__ \u76F4\u63A5\u662F {install,...}
124
+ assetFileNames: (i) => ((i.names || [i.name]).some(n => String(n).endsWith('.css')) ? 'index.css' : 'assets/[name]-[hash][extname]')
125
+ }
126
+ }
127
+ }
128
+ }
129
+ })
130
+ `;n[".env.development"]=`# dev \u58F3\u7684\u5E73\u53F0\u8FD0\u884C\u65F6\u914D\u7F6E\uFF08npm run dev \u65F6\u7531 vite \u6CE8\u5165 window.*\uFF0C\u53D8\u91CF\u542B\u4E49\u540C\u5E73\u53F0 config.js\uFF09
131
+ # \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
+ # IP=https://test.epxing.com:88/
133
+ IP=https://dev.epxing.com:88/
134
+ BASE_PROJECT_NAME=epxing-frame
135
+ BASE_AUTH_NAME=epx-auth
136
+ BASE_CLIENT_ID=frame
137
+ BASE_SYSTEM_ID=epxing-frame-manage
138
+ BASE_APP_ID=FM_SERVICE_PLATFORM
139
+ WITH_CREDENTIALS=false
140
+ `;n["src/index.js"]=`// \u8FDC\u7A0B\u5E93\u5165\u53E3\uFF1A\u81EA\u52A8\u6536\u96C6\u5168\u90E8\u4E1A\u52A1\u7EC4\u4EF6 + install \u6CE8\u518C\uFF08\u65B0\u589E\u7EC4\u4EF6\u96F6\u767B\u8BB0\uFF09
141
+ // \u672C\u9879\u76EE\u6E90\u7801\u91CC\u5199\u7684 ri- \u56FE\u6807\u89C4\u5219\uFF08\u7531 vite.config \u7684 epxIcons \u751F\u6210\uFF09\u3002
142
+ // \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
+ import 'virtual:epx-icons.css'
144
+ import pkg from '../package.json'
145
+ const files = import.meta.glob('./__DIRNAME__/**/*.vue', { eager: true })
146
+ if (!window.componentLibrary) window.componentLibrary = {}
147
+ const components = {}
148
+ for (const key in files) {
149
+ const comp = files[key].default
150
+ components[(comp && comp.name) || key.replace(/(\\.\\/|\\.vue|\\/)/g, '')] = comp
151
+ }
152
+
153
+ // install \u5E42\u7B49 + \u5F80 window.__epxInstalledLibs__ \u8BB0\u8D26 \u2014\u2014 \u522B\u5220\u3002
154
+ //
155
+ // \u4E00\u4E2A\u5E93\u6709**\u4E24\u6761**\u88C5\u914D\u8DEF\u5F84\uFF1A
156
+ // \xB7 \u8FDC\u7A0B\uFF1A\u540E\u7AEF listWebpackUrl \u4E0B\u53D1 \u2192 util.loadJs \u2192 window.library[name] \u2192 useVuePlugin
157
+ // \xB7 \u672C\u5730\uFF1A\u88AB\u6253\u8FDB\u67D0\u4E2A\u58F3\u91CC \u2192 \u76F4\u63A5 app.use(lib)\uFF08dev \u58F3\u5C31\u662F\u8FD9\u6761\uFF09
158
+ // \u672C\u5730\u90A3\u6761**\u4E0D\u7ECF window.library\uFF0C\u5E73\u53F0\u5B8C\u5168\u770B\u4E0D\u89C1**\uFF0C\u4E8E\u662F\u540E\u7AEF\u7167\u6837\u628A\u8FDC\u7A0B\u90A3\u4EFD\u4E0B\u53D1\u518D\u88C5\u4E00\u6B21\u3002
159
+ // \u53CC\u88C5\u65F6 app.component \u6709 \`if (!component)\` \u5B88\u536B\u4E0D\u4F1A\u91CD\uFF0C\u4F46 store.registerModule /
160
+ // router.addRoute \u6CA1\u6709\u5B88\u536B\uFF0C\u4F1A\u91CD\u590D\u751F\u6548\uFF08\u5178\u578B\u75C7\u72B6 [vuex] duplicate getter key\uFF09\u3002
161
+ //
162
+ // \u8BB0\u5728\u8FD9\u91CC\u800C\u4E0D\u662F\u53EA\u9760\u5E73\u53F0\uFF1A\u4E00\u4EFD\u4EE3\u7801\u540C\u65F6\u7BA1\u4F4F\u4E24\u6761\u8DEF\uFF0C\u4E14\u4E0D\u4F9D\u8D56\u5E73\u53F0\u7248\u672C
163
+ // \uFF08\u8001\u5E73\u53F0\u6CA1\u6709 loadJs \u53BB\u91CD\u65F6\uFF0C\u672C\u51FD\u6570\u81EA\u5DF1\u7684 early return \u4ECD\u7136\u751F\u6548\uFF09\u3002
164
+ const name = pkg.name
165
+ const version = pkg.version
166
+ const install = function (app, options) {
167
+ const marks = window.__epxInstalledLibs__ || (window.__epxInstalledLibs__ = {})
168
+ const sig = name + '@' + version
169
+ if (marks[sig]) return // \u5DF2\u88C5\u8FC7\uFF08\u672C\u5730\u6216\u8FDC\u7A0B\u90FD\u7B97\uFF09
170
+ // UMD \u4EA7\u7269\u4F1A\u5148\u628A\u81EA\u5DF1\u6302\u4E0A window.library[name] \u518D\u89E6\u53D1 onload\uFF0C\u636E\u6B64\u5206\u8FA8\u6765\u6E90\uFF1B
171
+ // \u6392\u67E5\u300C\u73B0\u5728\u751F\u6548\u7684\u5230\u5E95\u662F\u672C\u5730\u8FD8\u662F\u8FDC\u7A0B\u90A3\u4EFD\u300D\u65F6\u67E5\u8FD9\u5F20\u8868\u3002
172
+ marks[sig] = { source: (window.library && window.library[name]) ? 'remote' : 'local', at: Date.now() }
173
+
174
+ for (const key in components) {
175
+ if (!app.component(key)) app.component(key, components[key]) // \u5E73\u53F0\u6CA1\u6709\u7684\u624D\u6CE8\u518C
176
+ }
177
+ }
178
+ // 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
+ export default { name, version, install, ...components, runtime: pkg.runtime }
180
+ `;n["src/main.js"]=`// dev \u58F3\u5165\u53E3\uFF1A\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u767B\u5F55/\u83DC\u5355/store/router \u5168\u6709\uFF09+ \u6302\u672C\u4EA7\u54C1\u7EC4\u4EF6\u3002
181
+ // \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
+ // core = \u5185\u6838\uFF08createApp/store/router/\u5DE5\u5177\uFF09\uFF1Bcomponents = 113 \u4E2A\u901A\u7528\u7EC4\u4EF6\uFF1B
183
+ // 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
184
+ // designer\uFF08\u9875\u9762\u8BBE\u8BA1\u5668\uFF09/ dashboard\uFF08\u770B\u677F\uFF09\u91CD\uFF0C\u7528\u5230\u518D\u653E\u5F00\u6CE8\u91CA\u3002
185
+ // \u26A0\uFE0F \u5B50\u8DEF\u5F84\u4E0E\u805A\u5408\u5165\u53E3\uFF08import frame from 'epx-frame'\uFF09\u4E0D\u80FD\u6DF7\u7528\uFF1A\u805A\u5408\u662F\u81EA\u5305\u542B\u5355\u6587\u4EF6\uFF0C
186
+ // \u6DF7\u7528\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF08store/mixins \u53CC\u5B9E\u4F8B\u3001\u72B6\u6001\u9519\u4E71\uFF09\u3002\u6574\u4E2A\u9879\u76EE\u4E8C\u9009\u4E00\u3002
187
+ import { createApp } from 'epx-frame/core'
188
+ import components from 'epx-frame/components'
189
+ import business from 'epx-frame/business'
190
+ // import designer from 'epx-frame/designer'
191
+ // import dashboard from 'epx-frame/dashboard'
192
+ import product from './index'
193
+
194
+ // \u4E25\u683C\u6A21\u5F0F\uFF08\u811A\u624B\u67B6\u9ED8\u8BA4\u5F00\uFF09\uFF1A\u672A\u663E\u5F0F app.use \u7684\u80FD\u529B\u5305\u4E0D\u505A\u8FD0\u884C\u65F6\u61D2\u52A0\u8F7D\u515C\u5E95\u2014\u2014
195
+ // "\u6CA1\u88C5\u5C31\u4E0D\u51FA\u73B0"\uFF08\u5F15\u7528\u5230\u7684\u7EC4\u4EF6\u4F4D\u7F6E\u7559\u7A7A\u5E76 console \u62A5\u540D\u5B57\uFF0C\u63D0\u793A\u8BE5\u88C5\u54EA\u4E2A\u5165\u53E3\uFF09\u3002
196
+ // \u60F3\u8981"\u6CA1\u88C5\u4E5F\u61D2\u52A0\u8F7D\u515C\u5E95"\u7684\u5BBD\u677E\u8BED\u4E49\uFF0C\u6CE8\u91CA\u6389\u672C\u884C\u5373\u53EF\u3002
197
+ window.EPX_DISABLE_LAZY_PACKS = true
198
+
199
+ const app = createApp()
200
+ app.use(components)
201
+ app.use(business)
202
+ // app.use(designer); app.use(dashboard) // \u542F\u7528\u65F6\u628A\u4E0A\u9762\u5BF9\u5E94 import \u4E00\u8D77\u653E\u5F00\uFF0C\u5426\u5219 ReferenceError
203
+ app.use(product)
204
+ app.mount('#app')
205
+ `;n["index.html"]=`<!DOCTYPE html>
206
+ <html lang="zh-CN">
207
+ <head>
208
+ <meta charset="utf-8">
209
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
210
+ <title>__NAME__ dev</title>
211
+ <!-- window.IP \u7B49\u5E73\u53F0\u914D\u7F6E\u7531 vite \u4ECE .env* \u6CE8\u5165\uFF08\u89C1 vite.config.mjs \u7684 inject-window-config\uFF09\uFF0C\u522B\u5728\u8FD9\u91CC\u5185\u8054 -->
212
+ </head>
213
+ <body>
214
+ <div id="app"></div>
215
+ <script type="module" src="/src/main.js"></script>
216
+ </body>
217
+ </html>
218
+ `;n["src/__DIRNAME__/DemoList.vue"]=`<script>
219
+ // \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
+ // \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
+ // \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
222
+ import { EntityList } from 'epx-frame/components'
223
+ export default {
224
+ name: 'epx-__NAME__-demo-list',
225
+ extends: EntityList
226
+ }
227
+ </script>
228
+ <style lang="scss" scoped>
229
+ /* \u793A\u4F8B\uFF1A\u8BBE\u8BA1\u4EE4\u724C\u7528\u6CD5\uFF08mixins \u5DF2\u5168\u5C40\u6CE8\u5165\u514D import\uFF1B\u89C4\u8303\u89C1 frame \u7684 /ui-standard\uFF09 */
230
+ .epx-__NAME__-demo-card {
231
+ @include epx-card;
232
+ gap: var(--epx-space-2);
233
+ }
234
+ </style>
235
+ `;n[".gitignore"]=`node_modules/
236
+ lib/
237
+ dist/
238
+ *.tgz
239
+ .DS_Store
240
+ .env*.local
241
+ `;n["README.md"]='# __NAME__\n\nepx-frame \u4EA7\u54C1\u8FDC\u7A0B\u5E93\u9879\u76EE\uFF08Vite \u5F62\u6001\uFF09\u3002\u5F00\u53D1\u6307\u5357\u89C1 epx-frame \u4ED3\u5E93 `docs/PROJECT-GUIDE.md`\u3002\n\n```bash\nnpm i # \u88C5\u4F9D\u8D56\nnpm run dev # \u672C\u5730\u5F00\u53D1\uFF08:8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF0C\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\uFF09\nnpm run build:lib # \u6784\u5EFA\u8FDC\u7A0B\u5E93 lib/index.js + index.css\n```\n\n\u90E8\u7F72\uFF1Alib \u4EA7\u7269\u53D1\u5230\u6587\u4EF6\u670D\u52A1\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u7ED9\u672C\u7CFB\u7EDF\u914D js/css \u4E24\u6761 url\u3002\n`lib/index.deps.json`\uFF08\u4F9D\u8D56\u6E05\u5355\uFF09**\u8981\u548C index.js \u540C\u76EE\u5F55\u540C\u540D\u4E00\u8D77\u4F20**\uFF0C\u4F46**\u4E0D\u7528**\u5355\u72EC\u914D url\u2014\u2014\n\u5E73\u53F0\u6309 js url \u63A8\u5BFC\u5B83\uFF0C\u52A0\u8F7D\u672C\u5E93\u524D\u5148\u5907\u597D\u7528\u5230\u7684\u61D2\u52A0\u8F7D\u5E73\u53F0\u7EC4\u4EF6\uFF1B\u6F0F\u4F20\u53EA\u4F1A\u9759\u9ED8\u9000\u5316\u4E3A\u300C\u5907\u5168\u90E8\u300D\uFF08\u591A\u4E0B\u70B9 chunk\uFF09\u3002\n\u7EC4\u4EF6\u547D\u540D\uFF1A`epx-__NAME__-<\u57DF>-<\u540D>`\uFF08\u5168\u5E73\u53F0\u552F\u4E00\uFF09\uFF1B\u65B0\u589E .vue \u5373\u81EA\u52A8\u6CE8\u518C\u3002\n\n\u6846\u67B6\u5F15\u7528\u662F**\u6309\u9700\u5B50\u8DEF\u5F84**\u5F62\u6001\uFF08`epx-frame/core` + `epx-frame/components`\uFF0C\u89C1 src/main.js \u6CE8\u91CA\uFF09\uFF1A\nbusiness/designer/dashboard \u4E0D\u88C5\u4E5F\u4F1A\u5728\u8FD0\u884C\u65F6\u6309\u9700\u61D2\u52A0\u8F7D\uFF1B\u7EC4\u4EF6\u6E90\u7801\u91CC\u4E5F\u4ECE `epx-frame/components`\n\u5BFC\u5165\u7EE7\u627F\uFF08\u522B\u548C\u805A\u5408\u5165\u53E3 `epx-frame` \u6DF7\u7528\u2014\u2014\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF09\u3002\n\n## \u56FE\u6807\n\n**461 \u4E2A\u5E73\u53F0\u56FE\u6807\u76F4\u63A5\u5199\u5C31\u884C\uFF0C\u96F6\u914D\u7F6E**\u2014\u2014\u5B83\u4EEC\u968F epx-frame \u53D1\u5E03\uFF0C\u62FF\u5230\u5373\u7528\uFF1A\n\n```vue\n<i class="el-icon-search"></i>\n<i class="epx-icon-shezhi"></i>\n```\n\n`font-size` \u63A7\u5236\u5927\u5C0F\u3001`color` \u63A7\u5236\u989C\u8272\uFF08\u5E95\u5C42\u662F CSS mask + currentColor\uFF09\u3002\n\n\u60F3\u7528\u5E73\u53F0\u6CA1\u6709\u7684\u56FE\u6807\uFF0C\u76F4\u63A5\u5199 [Remix Icon](https://remixicon.com) \u7684\u540D\u5B57\uFF1A\n\n```vue\n<i class="ri-rocket-line"></i>\n```\n\n**\u8981\u5148 `npm i -D @iconify-json/ri`**\uFF083229 \u4E2A\u56FE\u6807\u7684\u6570\u636E\u6E90\uFF0C\u53EA\u5728\u6784\u5EFA\u671F\u8BFB\u4E00\u6B21\uFF0C\u4E0D\u8FDB\u4EA7\u7269\uFF09\u3002\n`vite.config.mjs` \u91CC\u7684 `epxIcons()` \u4F1A\u626B\u6E90\u7801\u3001\u53EA\u4E3A**\u4F60\u5B9E\u9645\u7528\u5230\u7684**\u90A3\u51E0\u4E2A\u751F\u6210\u89C4\u5219\u2014\u2014\n\u5199 5 \u4E2A\u5C31\u662F 5 \u4E2A\u7684\u4F53\u79EF\uFF0C\u4E0D\u4F1A\u628A 3229 \u4E2A\u90FD\u6253\u8FDB\u53BB\u3002\u540D\u5B57\u62FC\u9519\u4E86\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u51FA\u6765\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u53D8\u7A7A\u767D\u3002\n\n\u56FE\u6807\u540D\u5B58\u5728**\u6570\u636E\u5E93**\u91CC\uFF08\u83DC\u5355\u56FE\u6807\u3001\u6309\u94AE iconCls\u3001\u9875\u9762\u914D\u7F6E\uFF09\u7684\u90A3\u4E9B\uFF0C\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u2014\u2014\n\u4F46\u5E73\u53F0\u8FD0\u884C\u65F6\u4F1A\u6309\u9700\u8865\u9F50\uFF0C\u4F60\u4E0D\u7528\u505A\u4EFB\u4F55\u4E8B\u3002\u5B8C\u6574\u8BF4\u660E\u89C1 epx-frame \u4ED3\u5E93 `docs/guide/tools/icon.md`\u3002\n\n\u540E\u7AEF\u5730\u5740\u7B49\u73AF\u5883\u914D\u7F6E\u5728 `.env.development`\uFF1B\u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF0C\u65B0\u5EFA `.env.development.local`\n\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\uFF08\u5982 `IP=https://test.epxing.com:88/`\uFF09\uFF0C\u91CD\u542F dev \u751F\u6548\u3002\n\n\u521B\u5EFA\u547D\u4EE4\u5DF2\u5728 package.json \u5199\u5165 `runtime: "vue3"`\uFF0C\u5E76\u7531 src/index.js \u9ED8\u8BA4\u5BFC\u51FA\u540C\u540D\u6807\u8BC6\u3002\n\u6784\u5EFA\u90E8\u7F72\u540E\u5E73\u53F0\u6309\u5305\u9009\u62E9\u5B89\u88C5\u65B9\u5F0F\uFF1A`vue3` \u8D70\u539F\u751F\u5B89\u88C5\uFF0C`vue2` \u6216\u672A\u6807\u8BC6\u7684\u5176\u5B83\u5E93\u7EE7\u7EED\u4F7F\u7528\u517C\u5BB9\u6865\u3002\n';function E({name:i,dir:a,epxFrameSpec:l}){let d=i.toLowerCase(),t=i;if(!/^[a-z][a-z0-9-]*$/i.test(i))throw new Error(`\u4EA7\u54C1\u540D\u300C${i}\u300D\u9700\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/-`);let e=o.resolve(a);if(r.existsSync(e)&&r.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let s=l;if(r.mkdirSync(e,{recursive:!0}),!s)if(r.existsSync(o.join(m,"vite.config.mjs"))){if(!r.existsSync(o.join(m,"lib/epx-frame.common.js")))throw new Error("frame \u4ED3\u5E93 lib/ \u672A\u6784\u5EFA\u2014\u2014\u5148\u5728 frame-vue3 \u8DD1 pnpm build:component\uFF0C\u6216\u7528 --epx-frame \u6307\u5B9A\u6765\u6E90");console.log(" \u6253\u5305 epx-frame tarball\uFF08npm pack\uFF09\u2026");let p=_("npm pack --pack-destination "+JSON.stringify(e),{cwd:m,encoding:"utf8"}).trim().split(`
242
+ `).pop();s="file:./"+p,console.log(" \u2713 "+p)}else s="^"+JSON.parse(r.readFileSync(o.join(m,"package.json"),"utf8")).version,console.log(` epx-frame \u4F9D\u8D56 \u2192 ${s}\uFF08\u5168\u5C40\u5B89\u88C5\u6A21\u5F0F\uFF1Bnpm i \u65F6\u9700 --registry \u516C\u53F8\u6E90\uFF09`);for(let[c,p]of Object.entries(n)){let u=o.join(e,c.replace("__DIRNAME__",t));r.mkdirSync(o.dirname(u),{recursive:!0}),r.writeFileSync(u,p.replaceAll("__NAME__",d).replaceAll("__DIRNAME__",t).replaceAll("__EPX_FRAME__",s))}return _('git init -q && git add -A && git commit -qm "epx-create: \u9879\u76EE\u521D\u59CB\u5316\uFF08Vite \u5F62\u6001\u811A\u624B\u67B6\uFF09"',{cwd:e}),console.log(`
243
+ \u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),console.log(`\x1B[1m\u540E\u7EED\u6B65\u9AA4\uFF1A\x1B[0m
244
+ cd ${e}
245
+ npm i
246
+ npm run dev # :8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF08\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\u540E\u5F00\u53D1\u8C03\u8BD5\uFF09
247
+ 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
248
+ \u7EC4\u4EF6\u5199\u5728 src/${t}/\uFF08\u793A\u4F8B DemoList.vue \u8DD1\u901A\u540E\u53EF\u5220\uFF09\uFF1B\u6307\u5357\uFF1Aframe \u4ED3\u5E93 docs/PROJECT-GUIDE.md`),e}f(E,"scaffold");var b=process.argv[1]&&import.meta.url===g(process.argv[1]).href;if(b){let i=process.argv.slice(2),a=f(e=>{let s=i.indexOf(e);if(s===-1)return null;let c=i[s+1];return i.splice(s,2),c},"take"),l=a("--dir"),d=a("--epx-frame"),t=i.find(e=>!e.startsWith("-"));t||(console.error("\u7528\u6CD5\uFF1Anode tools/epx-create/scaffold.mjs <\u4EA7\u54C1\u540D> [--dir <\u76EE\u5F55>] [--epx-frame <spec>]"),process.exit(1));try{E({name:t,dir:l||o.resolve(m,"..","product",t),epxFrameSpec:d})}catch(e){console.error("\u2717 "+e.message),process.exit(1)}}export{n as TEMPLATES,E as scaffold};
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ var g=Object.defineProperty;var f=(e,s)=>g(e,"name",{value:s,configurable:!0});import c from"node:fs";import r from"node:path";var o=process.argv.slice(2).find(e=>!e.startsWith("--"));(!o||!c.existsSync(o))&&(console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/detect-vue3-risks.mjs <\u9879\u76EE\u76EE\u5F55>"),process.exit(1));var l=[],m=f(e=>{for(let s of c.readdirSync(e,{withFileTypes:!0})){let t=r.join(e,s.name);s.isDirectory()&&!/node_modules|\.git|^lib$|^dist$/.test(s.name)?m(t):s.name.endsWith(".vue")&&l.push(t)}},"walk"),a=r.join(o,"src");c.existsSync(a)&&m(a);var n=[];for(let e of l){let s=c.readFileSync(e,"utf8"),t=r.relative(o,e),u=/<template[>\s]/.test(s),d=/\bextends:\s*(\w+)/.exec(s),p=(/<style[^>]*\bscoped\b[^>]*>([\s\S]*?)<\/style>/.exec(s)||[])[1]||"";if(p&&d&&!u){let i=p.match(/^[ \t]*\.[\w-][^{}\n]*\{/gm)||[];i.length&&n.push({file:t,rule:"R1-scoped\u5931\u6548",detail:`extends ${d[1]} + <style scoped> + \u65E0 <template>\uFF0C\u4E14 scoped \u5757\u542B ${i.length} \u4E2A\u88F8\u7C7B\u9009\u62E9\u5668\uFF08\u5982 ${i[0].trim()}\uFF09\u3002Vue3 \u4E0B\u6DF1\u5C42\u5143\u7D20\u65E0 scopeId\u3001\u8FD9\u4E9B\u6837\u5F0F\u6574\u5757\u5931\u6548 \u2192 \u6539 :deep() \u6216\u53BB scoped \u8D70\u5168\u5C40 BEM`})}}console.log(`[detect-vue3-risks] \u626B\u63CF ${l.length} \u4E2A .vue`);n.length===0&&(console.log(" \u2713 \u672A\u53D1\u73B0\u5DF2\u77E5\u9759\u6001\u98CE\u9669\u6A21\u5F0F"),process.exit(0));console.log(` \u26A0 \u53D1\u73B0 ${n.length} \u5904\u98CE\u9669\uFF08build \u4E0D\u62A5\u9519\u3001\u8FD0\u884C\u65F6\u9759\u9ED8\u5931\u6548\uFF09\uFF1A`);for(let e of n)console.log(` [${e.rule}] ${e.file}
3
+ ${e.detail}`);process.exit(2);