@epxing/cli 0.5.0-beta.2 → 0.5.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +2 -2
- package/README.md +1 -1
- package/dist/platform-version.mjs +31 -6
- package/dist/tools/epx-create/scaffold.mjs +1 -1
- package/dist/tools/epx-migrate/migrate.mjs +2 -2
- package/package.json +1 -1
package/API.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
独立工程命令行工具,终端命令名为 epxing。/vite 提供产品构建插件,根入口不提供业务运行时。
|
|
4
4
|
|
|
5
|
-
本页对应包版本 `0.5.0-beta.
|
|
5
|
+
本页对应包版本 `0.5.0-beta.3`。导出名、子路径和签名从当前源码、package.json 与类型声明生成。
|
|
6
6
|
|
|
7
7
|
## 安装与使用
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
```sh
|
|
11
|
-
npm install -g @epxing/cli@0.5.0-beta.
|
|
11
|
+
npm install -g @epxing/cli@0.5.0-beta.3
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
独立的工程开发工具,包含交互菜单、开发服务、产品库构建、创建、Vue3 迁移、静态检查和升级技能安装。创建和升级默认使用 `@epxing/*` 独立包,版本留空时查询最新 `beta` 并固定到具体版本,没有 `beta` 时使用 `latest`;可用 `--packages-version` 指定版本或标签。CLI 使用自己的版本号。创建和升级会生成产品使用说明;`@epxing/cli/vite` 提供产品构建插件,不依赖聚合包中的构建工具。
|
|
6
6
|
|
|
7
|
-
本批测试版本:`@epxing/cli@0.5.0-beta.
|
|
7
|
+
本批测试版本:`@epxing/cli@0.5.0-beta.3`,平台包 `5.3.0-beta.2`,均使用 npm 公网 `beta` 标签。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
|
|
8
8
|
|
|
9
9
|
平台包从 `5.3.0-beta.2` 起自动加载自身样式,产品无需手动引入各包的 `style.css`。创建和迁移使用此版本时,CLI 不再添加这些导入;指定旧版本时仍保留显式样式以兼容旧包。标签会先解析成具体版本再选择模板。已有显式导入可以保留,产品覆盖样式放在框架导入之后。
|
|
10
10
|
|
|
@@ -1,16 +1,41 @@
|
|
|
1
1
|
/* eslint-disable no-console -- 输出已选择的平台版本 */
|
|
2
|
+
import http from 'node:http'
|
|
3
|
+
import https from 'node:https'
|
|
4
|
+
|
|
5
|
+
// Node 20 的双栈自动连接在部分 Windows 网络超时,查询 npm 时固定使用 IPv4。
|
|
6
|
+
function readMetadata (url) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const client = url.protocol === 'http:' ? http : https
|
|
9
|
+
const request = client.get(url, {
|
|
10
|
+
family: 4,
|
|
11
|
+
headers: { accept: 'application/vnd.npm.install-v1+json', 'cache-control': 'no-cache' },
|
|
12
|
+
timeout: 15000
|
|
13
|
+
}, response => {
|
|
14
|
+
if (response.statusCode !== 200) {
|
|
15
|
+
response.resume()
|
|
16
|
+
reject(new Error(`npm 返回 HTTP ${response.statusCode}`))
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
let body = ''
|
|
20
|
+
response.setEncoding('utf8')
|
|
21
|
+
response.on('data', chunk => { body += chunk })
|
|
22
|
+
response.on('error', reject)
|
|
23
|
+
response.on('end', () => {
|
|
24
|
+
try { resolve(JSON.parse(body)) } catch (error) { reject(error) }
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
request.on('timeout', () => request.destroy(new Error('npm 请求超时')))
|
|
28
|
+
request.on('error', reject)
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
2
32
|
// 测试阶段默认使用 beta;显式版本不访问网络,标签解析后固定到具体版本。
|
|
3
33
|
export async function resolvePlatformVersion (spec, registry = process.env.npm_config_registry || 'https://registry.npmjs.org/') {
|
|
4
34
|
if (spec && !/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(spec)) throw new Error('--packages-version 需要 npm 版本、版本范围或标签')
|
|
5
35
|
if (spec && /^[~^]?\d/.test(spec)) return spec
|
|
6
36
|
const tag = spec || 'beta'
|
|
7
37
|
try {
|
|
8
|
-
const
|
|
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()
|
|
38
|
+
const metadata = await readMetadata(new URL('@epxing%2fcore', registry.endsWith('/') ? registry : registry + '/'))
|
|
14
39
|
const tags = metadata['dist-tags'] || {}
|
|
15
40
|
const selectedTag = tags[tag] ? tag : !spec ? 'latest' : tag
|
|
16
41
|
const version = tags[selectedTag]
|
|
@@ -448,7 +448,7 @@ dist/
|
|
|
448
448
|
*.tgz
|
|
449
449
|
.DS_Store
|
|
450
450
|
.env*.local
|
|
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.
|
|
451
|
+
`;r["README.md"]='# __NAME__\n\nepx-frame \u4EA7\u54C1\u8FDC\u7A0B\u5E93\u9879\u76EE\uFF08Vite \u5F62\u6001\uFF09\u3002\u5F00\u53D1\u6307\u5357\u89C1 epx-frame \u4ED3\u5E93 `docs/PROJECT-GUIDE.md`\u3002\n\n```bash\nnpm i # \u88C5\u4F9D\u8D56\nnpm run dev # \u672C\u5730\u5F00\u53D1\uFF08:8080\uFF0C\u8D77\u5B8C\u6574\u5E73\u53F0\uFF0C\u7528\u5E73\u53F0\u8D26\u53F7\u767B\u5F55\uFF09\nnpm run build:lib # \u6784\u5EFA\u8FDC\u7A0B\u5E93 lib/index.js + index.css\n```\n\n\u90E8\u7F72\uFF1Alib \u4EA7\u7269\u53D1\u5230\u6587\u4EF6\u670D\u52A1\uFF0C\u5E73\u53F0 FM_SYSTEM_WEBPACK \u7ED9\u672C\u7CFB\u7EDF\u914D js/css \u4E24\u6761 url\u3002\n`lib/index.deps.json`\uFF08\u4F9D\u8D56\u6E05\u5355\uFF09**\u8981\u548C index.js \u540C\u76EE\u5F55\u540C\u540D\u4E00\u8D77\u4F20**\uFF0C\u4F46**\u4E0D\u7528**\u5355\u72EC\u914D url\u2014\u2014\n\u5E73\u53F0\u6309 js url \u63A8\u5BFC\u5B83\uFF0C\u52A0\u8F7D\u672C\u5E93\u524D\u5148\u5907\u597D\u7528\u5230\u7684\u61D2\u52A0\u8F7D\u5E73\u53F0\u7EC4\u4EF6\uFF1B\u6F0F\u4F20\u53EA\u4F1A\u9759\u9ED8\u9000\u5316\u4E3A\u300C\u5907\u5168\u90E8\u300D\uFF08\u591A\u4E0B\u70B9 chunk\uFF09\u3002\n\u7EC4\u4EF6\u547D\u540D\uFF1A`epx-__NAME__-<\u57DF>-<\u540D>`\uFF08\u5168\u5E73\u53F0\u552F\u4E00\uFF09\uFF1B\u65B0\u589E .vue \u5373\u81EA\u52A8\u6CE8\u518C\u3002\n\n\u6846\u67B6\u5F15\u7528\u662F**\u6309\u9700\u5B50\u8DEF\u5F84**\u5F62\u6001\uFF08`epx-frame/core` + `epx-frame/components`\uFF0C\u89C1 src/main.js \u6CE8\u91CA\uFF09\uFF1A\nbusiness/designer/dashboard \u4E0D\u88C5\u4E5F\u4F1A\u5728\u8FD0\u884C\u65F6\u6309\u9700\u61D2\u52A0\u8F7D\uFF1B\u7EC4\u4EF6\u6E90\u7801\u91CC\u4E5F\u4ECE `epx-frame/components`\n\u5BFC\u5165\u7EE7\u627F\uFF08\u522B\u548C\u805A\u5408\u5165\u53E3 `epx-frame` \u6DF7\u7528\u2014\u2014\u4F1A\u51FA\u73B0\u4E24\u5957\u8FD0\u884C\u65F6\uFF09\u3002\n\n## \u56FE\u6807\n\n**461 \u4E2A\u5E73\u53F0\u56FE\u6807\u76F4\u63A5\u5199\u5C31\u884C\uFF0C\u96F6\u914D\u7F6E**\u2014\u2014\u5B83\u4EEC\u968F epx-frame \u53D1\u5E03\uFF0C\u62FF\u5230\u5373\u7528\uFF1A\n\n```vue\n<i class="el-icon-search"></i>\n<i class="epx-icon-shezhi"></i>\n```\n\n`font-size` \u63A7\u5236\u5927\u5C0F\u3001`color` \u63A7\u5236\u989C\u8272\uFF08\u5E95\u5C42\u662F CSS mask + currentColor\uFF09\u3002\n\n\u60F3\u7528\u5E73\u53F0\u6CA1\u6709\u7684\u56FE\u6807\uFF0C\u76F4\u63A5\u5199 [Remix Icon](https://remixicon.com) \u7684\u540D\u5B57\uFF1A\n\n```vue\n<i class="ri-rocket-line"></i>\n```\n\n**\u8981\u5148 `npm i -D @iconify-json/ri`**\uFF083229 \u4E2A\u56FE\u6807\u7684\u6570\u636E\u6E90\uFF0C\u53EA\u5728\u6784\u5EFA\u671F\u8BFB\u4E00\u6B21\uFF0C\u4E0D\u8FDB\u4EA7\u7269\uFF09\u3002\n`vite.config.mjs` \u91CC\u7684 `epxIcons()` \u4F1A\u626B\u6E90\u7801\u3001\u53EA\u4E3A**\u4F60\u5B9E\u9645\u7528\u5230\u7684**\u90A3\u51E0\u4E2A\u751F\u6210\u89C4\u5219\u2014\u2014\n\u5199 5 \u4E2A\u5C31\u662F 5 \u4E2A\u7684\u4F53\u79EF\uFF0C\u4E0D\u4F1A\u628A 3229 \u4E2A\u90FD\u6253\u8FDB\u53BB\u3002\u540D\u5B57\u62FC\u9519\u4E86\u4F1A\u5728\u6784\u5EFA\u65F6\u62A5\u51FA\u6765\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u53D8\u7A7A\u767D\u3002\n\n\u56FE\u6807\u540D\u5B58\u5728**\u6570\u636E\u5E93**\u91CC\uFF08\u83DC\u5355\u56FE\u6807\u3001\u6309\u94AE iconCls\u3001\u9875\u9762\u914D\u7F6E\uFF09\u7684\u90A3\u4E9B\uFF0C\u6784\u5EFA\u671F\u626B\u4E0D\u5230\u2014\u2014\n\u4F46\u5E73\u53F0\u8FD0\u884C\u65F6\u4F1A\u6309\u9700\u8865\u9F50\uFF0C\u4F60\u4E0D\u7528\u505A\u4EFB\u4F55\u4E8B\u3002\u5B8C\u6574\u8BF4\u660E\u89C1 epx-frame \u4ED3\u5E93 `docs/guide/tools/icon.md`\u3002\n\n\u540E\u7AEF\u5730\u5740\u7B49\u73AF\u5883\u914D\u7F6E\u5728 `.env.development`\uFF1B\u672C\u673A\u60F3\u8FDE\u522B\u7684\u540E\u7AEF\uFF0C\u65B0\u5EFA `.env.development.local`\n\uFF08\u4E0D\u8FDB git\uFF09\u8986\u76D6\u5BF9\u5E94\u884C\uFF08\u5982 `IP=https://test.epxing.com:88/`\uFF09\uFF0C\u91CD\u542F dev \u751F\u6548\u3002\n\n\u521B\u5EFA\u547D\u4EE4\u5DF2\u5728 package.json \u5199\u5165 `runtime: "vue3"`\uFF0C\u5E76\u7531 src/index.js \u9ED8\u8BA4\u5BFC\u51FA\u540C\u540D\u6807\u8BC6\u3002\n\u6784\u5EFA\u90E8\u7F72\u540E\u5E73\u53F0\u6309\u5305\u9009\u62E9\u5B89\u88C5\u65B9\u5F0F\uFF1A`vue3` \u8D70\u539F\u751F\u5B89\u88C5\uFF0C`vue2` \u6216\u672A\u6807\u8BC6\u7684\u5176\u5B83\u5E93\u7EE7\u7EED\u4F7F\u7528\u517C\u5BB9\u6865\u3002\n';function j({name:i,dir:t,epxFrameSpec:o,packagesVersion:n,cliVersion:p="0.5.0-beta.3"}){let a=i.toLowerCase(),s=i;if(!/^[a-z][a-z0-9-]*$/i.test(i))throw new Error(`\u4EA7\u54C1\u540D\u300C${i}\u300D\u9700\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/-`);let e=m.resolve(t);if(n&&o)throw new Error("--packages-version \u4E0E --epx-frame \u4E0D\u80FD\u540C\u65F6\u6307\u5B9A");if(n&&!/^(?:[~^]?\d+\.\d+\.\d+(?:-[\w.-]+)?|[a-z][\w.-]*)$/.test(n))throw new Error("--packages-version \u9700\u8981 npm \u7248\u672C\u3001\u7248\u672C\u8303\u56F4\u6216\u6807\u7B7E");if(l.existsSync(e)&&l.readdirSync(e).length)throw new Error(`\u76EE\u6807\u76EE\u5F55\u975E\u7A7A\uFF1A${e}`);let c=o;if(l.mkdirSync(e,{recursive:!0}),!c&&!n)if(l.existsSync(m.join(_,"vite.config.mjs"))){if(!l.existsSync(m.join(_,"lib/epx-frame.common.js")))throw new Error("frame \u4ED3\u5E93 lib/ \u672A\u6784\u5EFA\u2014\u2014\u5148\u5728 frame-vue3 \u8DD1 pnpm build:component\uFF0C\u6216\u7528 --epx-frame \u6307\u5B9A\u6765\u6E90");console.log(" \u6253\u5305 epx-frame tarball\uFF08npm pack\uFF09\u2026");let u=v("npm pack --pack-destination "+JSON.stringify(e),{cwd:_,encoding:"utf8"}).trim().split(`
|
|
452
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
453
|
\u2713 \u9879\u76EE\u5DF2\u751F\u6210\uFF1A${e}`),n?(console.log(` npm install --prefix "${e}" --registry https://registry.npmjs.org/
|
|
454
454
|
cd "${e}"
|
|
@@ -230,9 +230,9 @@ ${f}.use(${k})
|
|
|
230
230
|
${f}.use(${E})
|
|
231
231
|
`}),x=!0}}),x||i.push(`${t}\uFF1A\u672A\u8BC6\u522B const app = createApp(...) \u542F\u52A8\u8BED\u53E5\uFF0C\u9700\u4EBA\u5DE5\u5B89\u88C5\u7EC4\u4EF6\u548C\u4E1A\u52A1\u63D2\u4EF6\u3002`),N(p,(c,g)=>{c.type==="Identifier"&&u.has(c.name)&&c.start<h&&g?.type==="MemberExpression"&&g.object===c&&i.push(`${t}\uFF1A${c.name} \u5728 createApp \u524D\u4F7F\u7528\uFF1B\u5148\u521B\u5EFA\u4EA7\u54C1 store/router \u5E76\u663E\u5F0F\u4F20\u5165 core\uFF0C\u518D\u5207\u6362\u72EC\u7ACB\u5305\u3002`)})}if(i.length)return{source:e,manual:i,blocked:!0};s.sort((x,h)=>h.start-x.start||h.end-x.end);let j=e;for(let x of s)j=j.slice(0,x.start)+x.text+j.slice(x.end);r.size&&(j=[...r].join(`
|
|
232
232
|
`)+`
|
|
233
|
-
`+j);try{(0,X.parse)(j,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","importAttributes"]})}catch(x){return{source:e,manual:[`${t}\uFF1A\u8F6C\u6362\u540E\u8BED\u6CD5\u9A8C\u8BC1\u5931\u8D25\uFF0C\u4FDD\u7559\u539F\u6587\uFF1A${x.message}`],blocked:!0}}return{source:j,manual:i,blocked:!1}}l(st,"transformScript");function Gt(e,t={}){if(t.filename?.endsWith(".vue")){let n=[],o=!1,i=e.replace(/(<script\b[^>]*>)([\s\S]*?)(<\/script>)/g,(s,r,a,u)=>{let p=st(a,t);return n.push(...p.manual),o||=p.blocked,r+p.source+u});return{source:o?e:i,manual:n,blocked:o}}return st(e,t)}l(Gt,"rewritePackageImports");function it({read:e,files:t,packagesVersion:n,cliVersion:o="0.5.0-beta.
|
|
233
|
+
`+j);try{(0,X.parse)(j,{sourceType:"unambiguous",plugins:["jsx","typescript","decorators-legacy","importAttributes"]})}catch(x){return{source:e,manual:[`${t}\uFF1A\u8F6C\u6362\u540E\u8BED\u6CD5\u9A8C\u8BC1\u5931\u8D25\uFF0C\u4FDD\u7559\u539F\u6587\uFF1A${x.message}`],blocked:!0}}return{source:j,manual:i,blocked:!1}}l(st,"transformScript");function Gt(e,t={}){if(t.filename?.endsWith(".vue")){let n=[],o=!1,i=e.replace(/(<script\b[^>]*>)([\s\S]*?)(<\/script>)/g,(s,r,a,u)=>{let p=st(a,t);return n.push(...p.manual),o||=p.blocked,r+p.source+u});return{source:o?e:i,manual:n,blocked:o}}return st(e,t)}l(Gt,"rewritePackageImports");function it({read:e,files:t,packagesVersion:n,cliVersion:o="0.5.0-beta.3",templates:i,newVite:s=!1}){let r=[],a=[];if(!/^(?:[~^]?\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");let u=nt(i,n),p=JSON.parse(e("package.json")),d=(e("src/index.js")||"").match(/import\.meta\.glob\(\s*['"]\.\/([^/'"]+)\//)?.[1]||p.name||"product",y=l(c=>c.replaceAll("__NAME__",p.name||"product").replaceAll("__DIRNAME__",d).replaceAll("__PACKAGES_VERSION__",n).replaceAll("__CLI_VERSION__",o),"render"),S=["vite.config.mjs","vite.config.js","vite.config.ts"].find(c=>e(c)!=null);if(!S&&e("webpack.config.js")!=null)return{changes:[],manual:["\u72EC\u7ACB\u5305\u8FDC\u7A0B\u5171\u4EAB\u9700\u8981 Vite\uFF1B\u8BF7\u52A0 --to-vite \u6216\u5148\u624B\u5DE5\u8FC1\u79FB\u6784\u5EFA\u914D\u7F6E\u3002"],blocked:!0};let A=S&&!s?[S]:[],j=new Set;for(let c of[...t,...A]){let g=e(c);if(!g||!/epx-frame|@epx(?:ing)?\//.test(g))continue;let b=Gt(g,{filename:c,packagesVersion:n,bootstrap:/(?:^|\/)main\.[jt]s$/.test(c)});a.push(...b.manual);let f=b.source;if(c===S&&!b.blocked&&!f.includes("epxShared(")){let E=(0,X.parse)(f,{sourceType:"module",plugins:["typescript","jsx","importAttributes"]}),$;N(E,R=>{!$&&R.type==="ObjectProperty"&&Bt(R)==="plugins"&&R.value.type==="ArrayExpression"&&($=R.value)}),$?f=`import { epxShared as __epxShared } from '@epxing/cli/vite'
|
|
234
234
|
`+f.slice(0,$.start+1)+"__epxShared(), "+f.slice($.start+1):a.push(`${c}\uFF1Aplugins \u6570\u7EC4\u65E0\u6CD5\u786E\u5B9A\uFF0C\u9700\u4EBA\u5DE5\u63A5\u5165 @epxing/cli/vite \u7684 epxShared\u3002`)}let k=c.endsWith(".vue")?[...f.matchAll(/<script\b[^>]*>([\s\S]*?)<\/script>/g)].map(E=>E[1]):[f];for(let E of k){let $=(0,X.parse)(E,{sourceType:"unambiguous",plugins:["typescript","jsx","decorators-legacy","importAttributes"]});N($,(R,Q)=>{if(R.type!=="StringLiteral"||!/^(?:ImportDeclaration|ExportNamedDeclaration|ExportAllDeclaration)$/.test(Q?.type||"")&&!(Q?.type==="CallExpression"&&(Q.callee.type==="Import"||Q.callee.name==="require")))return;let ke=R.value.match(/^(@epxing\/[\w-]+)/)?.[1];ke&&j.add(ke)})}f!==g&&r.push({file:c,after:f})}if(a.length)return{changes:[],manual:a,blocked:!0};if(s){r.push({file:S||"vite.config.mjs",after:y(u["vite.config.mjs"])});for(let c of["@epxing/cli","@epxing/icons","@epxing/theme"])j.add(c)}p.dependencies||={},p.devDependencies||={};for(let[c,g]of Object.entries(JSON.parse(y(u["package.json"])).dependencies))c.startsWith("@epxing/")&&!j.has(c)&&!["@epxing/core","@epxing/components","@epxing/utils"].includes(c)||(p.dependencies[c]=g);for(let c of["dependencies","devDependencies","peerDependencies"])for(let g of Object.keys(p[c]||{}))if(g.startsWith("@epx/")||U(g)!==g){let b=U(g);p[c][b]=n,delete p[c][g]}else g.startsWith("@epxing/")&&g!=="@epxing/cli"&&(p[c][g]=n);for(let c of j){let g=["@epxing/cli","@epxing/icons"].includes(c),b=g?"devDependencies":"dependencies";p[b][c]=c==="@epxing/cli"?o:n,delete p[g?"dependencies":"devDependencies"][c]}let x=S&&/node_modules\/epx-frame\/lib/.test(e(S)||"")&&!s;x?(p.devDependencies["epx-frame"]=p.dependencies["epx-frame"]||p.devDependencies["epx-frame"],delete p.dependencies["epx-frame"]):(delete p.dependencies["epx-frame"],delete p.devDependencies["epx-frame"]),p.runtime="vue3",r.push({file:"package.json",after:JSON.stringify(p,null,2)+`
|
|
235
|
-
`});let h=e("PRODUCT-GUIDE.md")==null||e("PRODUCT-GUIDE.md").includes("<!-- epxing-generated-product-guide -->")?"PRODUCT-GUIDE.md":"EPXING-PACKAGES-GUIDE.md";return e(h)!=null&&!e(h).includes("<!-- epxing-generated-product-guide -->")?{changes:[],manual:[`${h} \u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u5148\u6307\u5B9A\u6216\u817E\u51FA\u72EC\u7ACB\u5305\u4F7F\u7528\u8BF4\u660E\u8DEF\u5F84\u540E\u91CD\u8BD5\u3002`],blocked:!0}:(r.push({file:h,after:y(u["PRODUCT-GUIDE.md"])}),{changes:r,manual:x?["\u73B0\u6709 Vite \u9759\u6001\u8D44\u6E90\u4EE3\u7406\u4ECD\u8BFB\u53D6 epx-frame/lib\uFF0C\u6682\u4FDD\u7559\u4E3A\u5F00\u53D1\u4F9D\u8D56\uFF1B\u8FD0\u884C\u65F6\u6E90\u7801\u5DF2\u6539\u4E3A\u72EC\u7ACB\u5305\u3002"]:[],blocked:!1})}l(it,"planIndependentPackages");import{TEMPLATES as Ht}from"../epx-create/scaffold.mjs";var D=process.argv.slice(2),ie=D.indexOf("--epx-frame"),re=ie!==-1?D[ie+1]:null;ie!==-1&&D.splice(ie,2);var fe=D.indexOf("--packages-version"),O=fe===-1?null:D.splice(fe,2)[1],rt=D.indexOf("--cli-version"),pt=rt===-1?"0.5.0-beta.
|
|
235
|
+
`});let h=e("PRODUCT-GUIDE.md")==null||e("PRODUCT-GUIDE.md").includes("<!-- epxing-generated-product-guide -->")?"PRODUCT-GUIDE.md":"EPXING-PACKAGES-GUIDE.md";return e(h)!=null&&!e(h).includes("<!-- epxing-generated-product-guide -->")?{changes:[],manual:[`${h} \u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u5148\u6307\u5B9A\u6216\u817E\u51FA\u72EC\u7ACB\u5305\u4F7F\u7528\u8BF4\u660E\u8DEF\u5F84\u540E\u91CD\u8BD5\u3002`],blocked:!0}:(r.push({file:h,after:y(u["PRODUCT-GUIDE.md"])}),{changes:r,manual:x?["\u73B0\u6709 Vite \u9759\u6001\u8D44\u6E90\u4EE3\u7406\u4ECD\u8BFB\u53D6 epx-frame/lib\uFF0C\u6682\u4FDD\u7559\u4E3A\u5F00\u53D1\u4F9D\u8D56\uFF1B\u8FD0\u884C\u65F6\u6E90\u7801\u5DF2\u6539\u4E3A\u72EC\u7ACB\u5305\u3002"]:[],blocked:!1})}l(it,"planIndependentPackages");import{TEMPLATES as Ht}from"../epx-create/scaffold.mjs";var D=process.argv.slice(2),ie=D.indexOf("--epx-frame"),re=ie!==-1?D[ie+1]:null;ie!==-1&&D.splice(ie,2);var fe=D.indexOf("--packages-version"),O=fe===-1?null:D.splice(fe,2)[1],rt=D.indexOf("--cli-version"),pt=rt===-1?"0.5.0-beta.3":D.splice(rt,2)[1];if(re&&O)throw new Error("--packages-version \u4E0E --epx-frame \u4E0D\u80FD\u540C\u65F6\u6307\u5B9A");if(fe!==-1&&(!O||O.startsWith("--")))throw new Error("--packages-version \u7F3A\u5C11\u503C");var _=D.find(e=>!e.startsWith("--")),W=D.includes("--apply"),xe=D.includes("--transform-vue"),ge=D.includes("--report-only"),ct=D.includes("--to-vite"),m=l((...e)=>console.log(...e),"log");re&&(ee["epx-frame"].target=re);(!_||!v.existsSync(_))&&(console.error("\u7528\u6CD5\uFF1Anode tools/epx-migrate/migrate.mjs <\u8001\u9879\u76EE\u76EE\u5F55> [--apply] [--transform-vue] [--to-vite] [--report-only] [--epx-frame <spec>]"),process.exit(1));var V=l(e=>P.join(_,e),"rel"),F=l(e=>v.existsSync(V(e))?v.readFileSync(V(e),"utf8"):null,"read"),I=[],C=[],he=!1,L=l(e=>m(`
|
|
236
236
|
${"\u2501".repeat(60)}
|
|
237
237
|
\u258D ${e}
|
|
238
238
|
${"\u2501".repeat(60)}`),"stage"),Wt=l(e=>{let t=String(e),n=/(^|[^\d.])3(\.|x|\b)/.test(t);return/(^|[^\d.])2(\.|x|\b)/.test(t)&&!n},"wantsVue2Only");if(W)try{de("git status --porcelain",{cwd:_,encoding:"utf8"}).trim()&&(console.error("\u2717 \u9879\u76EE\u5DE5\u4F5C\u6811\u4E0D\u5E72\u51C0\uFF0C--apply \u524D\u8BF7\u5148 commit/stash\uFF08\u4FBF\u4E8E git diff \u5BA1\u67E5\u4E0E\u56DE\u6EDA\uFF09\u3002"),process.exit(1))}catch{console.error("\u2717 \u76EE\u6807\u4E0D\u662F git \u4ED3\u5E93\uFF1B--apply \u9700\u8981 git \u4EE5\u4FBF\u5BA1\u67E5\u56DE\u6EDA\u3002\u5148 git init \u6216\u53BB\u6389 --apply \u8D70 dry-run\u3002"),process.exit(1)}var T=[],M=[],lt=[],ut=l(e=>{for(let t of v.readdirSync(e,{withFileTypes:!0})){let n=P.join(e,t.name);t.isDirectory()&&!/node_modules|\.git|^lib$|^dist$/.test(t.name)?ut(n):t.name.endsWith(".vue")?(T.push(n),M.push(n)):/\.(?:[cm]?js|jsx|ts|tsx)$/.test(t.name)?M.push(n):/\.(?:css|scss|less|sass|styl|stylus)$/.test(t.name)&<.push(n)}},"walk");v.existsSync(V("src"))&&ut(V("src"));var Se=new Set;for(let e of M){let t=v.readFileSync(e,"utf8");for(let n of t.matchAll(/(?:from\s+|require\()\s*['"]([^'"./][^'"]*)['"]/g)){let o=n[1];o.startsWith("@/")||Se.add(o.startsWith("@")?o.split("/").slice(0,2).join("/"):o.split("/")[0])}}var mt=l(e=>{let t=e.match(/<script(\s[^>]*)?>([\s\S]*?)<\/script>/);return t?{attrs:t[1]||"",body:t[2]}:null},"scriptOf"),gt=l(e=>/[(=,]\s*\n?\s*<[A-Za-z][\w-]*[\s>/]/.test(e),"hasJsx"),B=T.filter(e=>{let t=mt(v.readFileSync(e,"utf8"));return t&>(t.body)});L("\u2460 \u4F9D\u8D56\u8FC1\u79FB\uFF08package.json\uFF09");var ne=F("package.json"),dt=F("webpack.config.js")!=null;if(ne){let e=JSON.parse(ne),t=e.runtime!=="vue3";e.runtime="vue3",t&&m(" [\u6539] runtime \u2192 vue3\uFF08\u521B\u5EFA/\u8FC1\u79FB\u540E\u7684\u8FD0\u884C\u65F6\u6807\u8BC6\uFF09");let n=[],o=l((s,r,a,u)=>{let p=a?"devDependencies":"dependencies";e[p]=e[p]||{},e[p][s]!==r&&(n.push([e[p][s]!=null?"\u6539":"\u52A0",s,e[p][s]||"\u2014",r,u||""]),e[p][s]=r)},"setDep");for(let[s,r]of Object.entries(ee))for(let a of["dependencies","devDependencies"]){let u=e[a];u&&u[s]!=null&&(r.target===null?(n.push(["\u5220",s,u[s],"\u2014",r.note||""]),delete u[s]):u[s]!==r.target&&(n.push(["\u6539",s,u[s],r.target,r.note||""]),u[s]=r.target))}if(dt)for(let[s,r]of Object.entries(Ae))o(s,r,!0,"lib \u6784\u5EFA\u95ED\u5305");if(B.length)for(let[s,r]of Object.entries(Pe))o(s,r,!0,`.vue \u5185 JSX\uFF08${B.length} \u6587\u4EF6\uFF09`);if(T.length)for(let[s,r]of Object.entries(Fe))o(s,r,!1,"element-plus \u56FE\u6807\uFF08gogocode \u8F6C\u6362\u4EA7\u7269\u9700\u8981\uFF09");(ne.includes("@vue/eslint-config-standard")||ne.includes("babel-eslint"))&&C.push("lint \u914D\u7F6E\uFF1A\u8001 eslint6+standard5 \u6808\u5DF2\u9000\u5F79\uFF08ERESOLVE \u51B2\u7A81\uFF09\u2014\u2014\u6309\u5E73\u53F0 .eslintrc \u91CD\u5EFA\u89C4\u5219\uFF08eslint8 + plugin-vue9\uFF09");let i={...e.dependencies||{},...e.devDependencies||{}};for(let s of[...Se].sort())i[s]||s==="epx-frame"||s==="vue"||(pe[s]?o(s,pe[s],!1,"\u9690\u5F0F\u4F9D\u8D56\u8865\u58F0\u660E\uFF08\u539F\u9760 hoist\uFF09"):C.push(`src \u91CC import \u4E86 \`${s}\` \u4F46 package.json \u672A\u58F0\u660E\u4E14\u4E0D\u5728\u5DF2\u77E5\u7248\u672C\u8868\u2014\u2014\u4EBA\u5DE5\u8865\u7248\u672C`));n.length||t?(n.forEach(([s,r,a,u,p])=>m(` [${s}] ${r.padEnd(26)} ${String(a).padEnd(12)} \u2192 ${String(u).padEnd(12)} ${p}`)),I.push({file:"package.json",after:JSON.stringify(e,null,2)+`
|