@epxing/cli 0.3.1 → 0.5.0-beta.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.
@@ -1,4 +1,209 @@
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"]=`{
1
+ var A=Object.defineProperty;var c=(i,p)=>A(i,"name",{value:p,configurable:!0});import r from"node:fs";import o from"node:path";import{execSync as v}from"node:child_process";import{fileURLToPath as I,pathToFileURL as h}from"node:url";function g(i){return{...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 '@epxing/core/style.css'
56
+ import '@epxing/component/style.css'
57
+ import '@epxing/business/style.css'
58
+ import App from './App.vue'
59
+ import product from './index'
60
+
61
+ const app = createApp({ rootComponent: App })
62
+ app.use(Components)
63
+ app.use(Business)
64
+ app.use(product)
65
+ app.mount('#app')
66
+ `,"src/App.vue":`<script setup>
67
+ import { ref } from 'vue'
68
+ const count = ref(0)
69
+ </script>
70
+
71
+ <template>
72
+ <main class="product-start">
73
+ <h1>__NAME__</h1>
74
+ <p>\u4EA7\u54C1\u5DF2\u542F\u52A8\uFF0C\u53EF\u4EE5\u5F00\u59CB\u5F00\u53D1\u3002</p>
75
+ <button @click="count++">\u70B9\u51FB {{ count }} \u6B21</button>
76
+ </main>
77
+ </template>
78
+
79
+ <style scoped>
80
+ .product-start { padding: var(--epx-space-4, 24px); color: var(--epx-text); }
81
+ </style>
82
+ `,"src/__DIRNAME__/DemoList.vue":`<script>
83
+ import { EntityList } from '@epxing/component'
84
+ export default {
85
+ name: 'epx-__NAME__-demo-list',
86
+ extends: EntityList
87
+ // \u914D\u7F6E\u771F\u5B9E metaId\u3001listFields\u3001operates \u540E\uFF0C\u5728\u4EA7\u54C1\u9875\u9762\u4E2D\u4F7F\u7528\u3002
88
+ }
89
+ </script>
90
+ <style lang="scss" scoped>
91
+ .epx-__NAME__-demo-card {
92
+ @include epx-card;
93
+ font-size: var(--epx-font-size-base, 14px);
94
+ }
95
+ </style>
96
+ `,"README.md":`# __NAME__
97
+
98
+ \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
99
+
100
+ \`\`\`sh
101
+ npm install --registry https://registry.npmjs.org/
102
+ npm run dev
103
+ npx epxing lib
104
+ npx epxing lib --full
105
+ npm run build:app
106
+ \`\`\`
107
+
108
+ \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":b}}c(g,"createPackageTemplates");var b=`# \u4EA7\u54C1\u5F00\u53D1\u4E0E\u5347\u7EA7\u4F7F\u7528\u8BF4\u660E
110
+
111
+ <!-- epxing-generated-product-guide -->
112
+
113
+ \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
+
115
+ ## \u5B89\u88C5\u4E0E\u542F\u52A8
116
+
117
+ \`\`\`sh
118
+ npm install --registry https://registry.npmjs.org/
119
+ npm run dev
120
+ \`\`\`
121
+
122
+ \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
+ ## \u5E94\u7528\u5165\u53E3
125
+
126
+ \`\`\`js
127
+ import { createApp } from '@epxing/core'
128
+ import Components from '@epxing/component'
129
+ import Business from '@epxing/business'
130
+ import '@epxing/theme'
131
+ import '@epxing/core/style.css'
132
+ import '@epxing/component/style.css'
133
+ import '@epxing/business/style.css'
134
+ import App from './App.vue'
135
+ import product from './index'
136
+
137
+ const app = createApp({ rootComponent: App })
138
+ app.use(Components)
139
+ app.use(Business)
140
+ app.use(product)
141
+ app.mount('#app')
142
+ \`\`\`
143
+
144
+ 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
+
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\u5B89\u88C5\u63D2\u4EF6\u5E76\u5F15\u5165 style.css\u3002\u8FDC\u7A0B\u4EA7\u54C1\u4F7F\u7528\u516C\u5F00\u7EC4\u4EF6\uFF0C\u5BBF\u4E3B\u8D1F\u8D23\u5B89\u88C5\u8BBE\u8BA1/\u4E1A\u52A1\u63D2\u4EF6\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 d=o.resolve(o.dirname(I(import.meta.url)),"../.."),n={};n["package.json"]=`{
2
207
  "name": "__NAME__",
3
208
  "version": "0.1.0",
4
209
  "runtime": "vue3",
@@ -230,6 +435,8 @@ export default {
230
435
  .epx-__NAME__-demo-card {
231
436
  @include epx-card;
232
437
  gap: var(--epx-space-2);
438
+ font-size: var(--epx-font-size-base, 14px);
439
+ border-radius: var(--epx-radius-base, 4px);
233
440
  }
234
441
  </style>
235
442
  `;n[".gitignore"]=`node_modules/
@@ -238,11 +445,15 @@ dist/
238
445
  *.tgz
239
446
  .DS_Store
240
447
  .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
448
+ `;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 y({name:i,dir:p,epxFrameSpec:u,packagesVersion:s,cliVersion:_="0.5.0-beta.0"}){let m=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(p);if(s&&u)throw new Error("--packages-version \u4E0E --epx-frame \u4E0D\u80FD\u540C\u65F6\u6307\u5B9A");if(s&&!/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(s))throw new Error("--packages-version \u9700\u8981 npm \u7248\u672C\u3001\u7248\u672C\u8303\u56F4\u6216\u6807\u7B7E");if(r.existsSync(e)&&r.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let a=u;if(r.mkdirSync(e,{recursive:!0}),!a&&!s)if(r.existsSync(o.join(d,"vite.config.mjs"))){if(!r.existsSync(o.join(d,"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 l=v("npm pack --pack-destination "+JSON.stringify(e),{cwd:d,encoding:"utf8"}).trim().split(`
449
+ `).pop();a="file:./"+l,console.log(" \u2713 "+l)}else a="^"+JSON.parse(r.readFileSync(o.join(d,"package.json"),"utf8")).version,console.log(` epx-frame \u4F9D\u8D56 \u2192 ${a}\uFF08\u5168\u5C40\u5B89\u88C5\u6A21\u5F0F\uFF1Bnpm i \u65F6\u9700 --registry \u516C\u53F8\u6E90\uFF09`);let E=s?g(n):n;for(let[f,l]of Object.entries(E)){let x=o.join(e,f.replace("__DIRNAME__",t));r.mkdirSync(o.dirname(x),{recursive:!0}),r.writeFileSync(x,l.replaceAll("__NAME__",m).replaceAll("__DIRNAME__",t).replaceAll("__EPX_FRAME__",a||"").replaceAll("__PACKAGES_VERSION__",s||"").replaceAll("__CLI_VERSION__",_))}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}`),s?(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
244
455
  cd ${e}
245
456
  npm i
246
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
247
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
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};
459
+ \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)}c(y,"scaffold");var S=process.argv[1]&&import.meta.url===h(process.argv[1]).href;if(S){let i=process.argv.slice(2),p=c(t=>{let e=i.indexOf(t);if(e===-1)return null;let a=i[e+1];return i.splice(e,2),a},"take"),u=p("--dir"),s=p("--epx-frame"),_=p("--packages-version"),m=i.find(t=>!t.startsWith("-"));m||(console.error("\u7528\u6CD5\uFF1Anode tools/epx-create/scaffold.mjs <\u4EA7\u54C1\u540D> [--dir <\u76EE\u5F55>] [--epx-frame <spec>]"),process.exit(1));try{y({name:m,dir:u||o.resolve(d,"..","product",m),epxFrameSpec:s,packagesVersion:_})}catch(t){console.error("\u2717 "+t.message),process.exit(1)}}export{n as TEMPLATES,y as scaffold};
@@ -1,3 +1,3 @@
1
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}
2
+ import{a as u}from"../chunks/AMQWUBTZ.mjs";import{b as x}from"../chunks/PP5RD4RH.mjs";import"../chunks/SH6LMMHZ.mjs";import{a as m}from"../chunks/H4POBCHI.mjs";import n from"node:fs";import c from"node:path";var r=process.argv.slice(2).find(e=>!e.startsWith("--"));(!r||!n.existsSync(r))&&(console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/detect-vue3-risks.mjs <\u9879\u76EE\u76EE\u5F55>"),process.exit(1));var f=[],h=m(e=>{for(let s of n.readdirSync(e,{withFileTypes:!0})){let i=c.join(e,s.name);s.isDirectory()&&!/node_modules|\.git|^lib$|^dist$/.test(s.name)?h(i):/\.(?:vue|[cm]?js|jsx|ts|tsx)$/.test(s.name)&&f.push(i)}},"walk"),l=c.join(r,"src");n.existsSync(l)&&h(l);var o=[];for(let e of f){let s=n.readFileSync(e,"utf8"),i=c.relative(r,e),a=u(s,{filename:e});for(let t of a.fixes)o.push({file:`${i}:${t.line}`,rule:"R2-date-format",detail:`${t.before} \u2192 ${t.after}\uFF1B\u6267\u884C\u65E5\u671F\u683C\u5F0F\u4FEE\u590D\u5668 --apply\uFF1B\u539F\u751FVue3\u5305\u4E0D\u8D70\u65E7render\u57AB\u7247\uFF08F21\uFF09`});for(let t of a.warnings)o.push({file:i,rule:"R2-date-format\u5F85\u8FFD\u8E2A",detail:t});let $=/<template[>\s]/.test(s),p=/\bextends:\s*(\w+)/.exec(s),d=(/<style[^>]*\bscoped\b[^>]*>([\s\S]*?)<\/style>/.exec(s)||[])[1]||"";if(d&&p&&!$){let t=d.match(/^[ \t]*\.[\w-][^{}\n]*\{/gm)||[];t.length&&o.push({file:i,rule:"R1-scoped\u5F85\u590D\u6838",detail:`extends ${p[1]} + <style scoped> + \u65E0 <template>\uFF0C\u4E14 scoped \u5757\u542B ${t.length} \u4E2A\u88F8\u7C7B\u9009\u62E9\u5668\uFF08\u5982 ${t[0].trim()}\uFF09\u3002\u4EC5\u63D0\u793A\u5F85\u590D\u6838\uFF0C\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF1B\u5148\u4FDD\u7559 scoped\uFF0C\u7528\u6700\u7EC8\u4EA7\u7269\u9A8C\u8BC1 DOM \u4E0E CSS \u5339\u914D\u3002\u82E5\u786E\u9700\u53BB scoped\uFF0C\u987B\u540C\u65F6\u5B8C\u6210\u552F\u4E00\u547D\u540D\u7A7A\u95F4\u9694\u79BB\uFF0C\u5E76\u590D\u6D4B\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u548C\u5176\u4ED6\u9875\u9762\uFF1B\u4E0D\u8981\u4E3A\u6D88\u9664\u544A\u8B66\u6279\u91CF\u6539\u6837\u5F0F`})}}if(n.existsSync(l))for(let e of x(r)){for(let s of e.fixes)o.push({file:`${e.file}:${s.line}`,rule:"R3-theme",detail:`${s.before} \u2192 ${s.after}\uFF1B\u6267\u884C epxing theme <\u76EE\u5F55> --apply\uFF0C\u6216\u5728\u8FC1\u79FB\u65F6\u81EA\u52A8\u9002\u914D\uFF08E2\uFF09`});for(let s of e.warnings)o.push({file:e.file,rule:"R3-theme\u5F85\u590D\u6838",detail:s})}console.log(`[detect-vue3-risks] \u626B\u63CF ${f.length} \u4E2A\u7EC4\u4EF6/\u811A\u672C\u6587\u4EF6\u53CA src \u6837\u5F0F\u6587\u4EF6`);o.length===0&&(console.log(" \u2713 \u672A\u53D1\u73B0\u5DF2\u77E5\u9759\u6001\u98CE\u9669\u6A21\u5F0F"),process.exit(0));console.log(` \u26A0 \u53D1\u73B0 ${o.length} \u5904\u5F85\u590D\u6838\u98CE\u9669\u6A21\u5F0F\uFF08\u9759\u6001\u547D\u4E2D\u4E0D\u4EE3\u8868\u8FD0\u884C\u65F6\u5DF2\u5931\u6548\uFF09\uFF1A`);for(let e of o)console.log(` [${e.rule}] ${e.file}
3
3
  ${e.detail}`);process.exit(2);
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{b as t}from"../chunks/AMQWUBTZ.mjs";import"../chunks/SH6LMMHZ.mjs";import"../chunks/H4POBCHI.mjs";import l from"node:fs";import i from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!l.existsSync(i.join(n,"src")))console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/fix-date-formats.mjs <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=t(i.resolve(n),{apply:s});console.log(`[\u65E5\u671F\u683C\u5F0F ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u52A8\u6001/\u89E3\u6790\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u8FFD\u8E2A\uFF1A"+e)}r.some(o=>o.warnings.length)&&(process.exitCode=2)}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{b as l}from"../chunks/PP5RD4RH.mjs";import"../chunks/SH6LMMHZ.mjs";import"../chunks/H4POBCHI.mjs";import i from"node:fs";import t from"node:path";var c=process.argv.slice(2),n=c.find(s=>!s.startsWith("--"));if(!n||!i.existsSync(t.join(n,"src")))console.error("\u7528\u6CD5\uFF1Aepxing theme <\u4EA7\u54C1\u6216\u9879\u76EE\u76EE\u5F55> [--apply]"),process.exitCode=1;else{let s=c.includes("--apply"),r=l(t.resolve(n),{apply:s});console.log(`[\u4E3B\u9898\u9002\u914D ${s?"apply":"dry-run"}] ${r.reduce((o,e)=>o+e.count,0)} \u5904\u81EA\u52A8\u4FEE\u590D\uFF1B${r.reduce((o,e)=>o+e.warnings.length,0)} \u9879\u5F85\u590D\u6838`);for(let o of r){console.log(o.file);for(let e of o.fixes)console.log(` L${e.line}: ${e.before} \u2192 ${e.after}`);for(let e of o.warnings)console.log(" \u5F85\u590D\u6838\uFF1A"+e)}console.log("\u4FDD\u7559 scoped\uFF1B\u4E0D\u6CE8\u5165\u5168\u5C40\u4E3B\u9898\u3002\u53D1\u5E03\u524D\u7528\u6700\u7EC8\u4EA7\u7269\u5207\u6362\u5E73\u53F0\u5B57\u53F7\u3001\u5706\u89D2\u3001\u660E\u6697\u4E3B\u9898\uFF0C\u5E76\u68C0\u67E5\u7EC4\u4EF6\u5916\u5143\u7D20\u3002"),r.some(o=>o.warnings.length)&&(process.exitCode=2)}