@epxing/cli 0.5.0-beta.8 → 0.5.0-beta.9
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
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
独立工程命令行工具,终端命令名为 epxing。/vite 提供产品构建插件,根入口不提供业务运行时。
|
|
4
4
|
|
|
5
|
-
本页对应包版本 `0.5.0-beta.
|
|
5
|
+
本页对应包版本 `0.5.0-beta.9`。导出名、子路径和签名从当前源码、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.9
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
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.9`,平台包 `5.3.0-beta.5`,均使用 npm 公网 `beta` 标签。CLI 与平台独立版本,本次不升级平台包。完整流程见文档站“CLI 创建、升级与产品使用”;各包公开 API 随安装包的 `API.md` 提供。
|
|
8
|
+
|
|
9
|
+
`0.5.0-beta.9` 补齐已有标准库入口携带 `--full` 的迁移:升级后 `build:lib` 为 `node build-lib.mjs`,全量构建保留在 `build:lib:full`。预览不改文件,自定义构建命令和自定义入口文件继续保留并报告待接入。
|
|
8
10
|
|
|
9
11
|
`0.5.0-beta.8` 修复 Node 命令行扫描 HTML 实体时的 `document is not defined`:迁移、日期与主题扫描使用 Node 版 Vue 解析器,保留模板中的实体与原格式。旧版本遇到该问题时更新 CLI 后重新执行预览,不删除实体或添加假的 document。
|
|
10
12
|
|
|
@@ -204,4 +204,6 @@ Claude Code 项目技能放在 `.claude/skills/epxing-frontend-vue3-migrate/`,
|
|
|
204
204
|
|
|
205
205
|
## 库构建命令约定
|
|
206
206
|
|
|
207
|
+
升级收尾必须复查 `package.json`:标准 `build:lib` 应为 `node build-lib.mjs`,不得残留 `--full`;全量参数放在 `build:lib:full`。CLI 0.5.0-beta.9 补齐旧标准入口带 `--full` 的自动迁移。自定义构建或入口文件报告待接入时,由 AI 在已有升级授权内核对并保留必要步骤,不能将“保留原命令”当成默认懒加载已完成。
|
|
208
|
+
|
|
207
209
|
创建与升级后的标准工程使用 `npm run build:lib` 默认懒加载;全量构建使用 `npm run build:lib --full` 或 `npm run build:lib:full`。构建入口同时识别 `--full` 参数与 npm 透传的 `npm_config_full`。保留 `build:lib:lazy` 旧入口。升级已有 Vue3 工程也须核对 package.json 与 build-lib.mjs;自定义脚本或同名文件不可覆盖,继续人工接入并保留原构建步骤。懒加载上传整个 lib/,包含 chunks、清单与兜底包。
|
|
@@ -79,7 +79,7 @@ ${t}`);else{let a=!0,c="";if(/\.m?js$/.test(e)){let p=j.join(ve.tmpdir(),`epx-mi
|
|
|
79
79
|
`).slice(0,3).join(" "))}if(!a)m(` \xB7 ${e}\uFF1A\u6CE8\u5165\u540E\u8BED\u6CD5\u6821\u9A8C\u672A\u901A\u8FC7\uFF0C\u5DF2\u653E\u5F03\u6539\u52A8`),$.push(`${e} \u6CE8\u5165\u6309\u9700\u6253\u5305\u63D2\u4EF6\u540E node --check \u672A\u901A\u8FC7\uFF08\u5DF2\u653E\u5F03\u8BE5\u81EA\u52A8\u6539\u52A8\uFF0C\u6587\u4EF6\u4FDD\u6301\u539F\u6837\uFF09\uFF0C\u8BF7\u624B\u52A8\u52A0\uFF1A
|
|
80
80
|
${t}
|
|
81
81
|
\uFF08\u6821\u9A8C\u62A5\u9519\uFF1A${c}\uFF09`);else{m(` \u2713 ${e}\uFF1A\u6CE8\u5165\u6309\u9700\u6253\u5305\u63D2\u4EF6\uFF08\u6807\u51C6 build:lib \u9ED8\u8BA4\u5F00\u542F\uFF0Cglob='${n}'\uFF09`),r?r.after=i.src:w.push({file:e,after:i.src});let p=[...w].reverse().find(x=>x.file==="package.json"),g=null;try{g=JSON.parse(p?p.after:P("package.json")||"{}")}catch{g=null}if(!g)$.push("package.json \u89E3\u6790\u5931\u8D25\uFF0C\u672A\u80FD\u8865 build:lib:lazy \u811A\u672C\u4E0E cross-env\uFF0C\u8BF7\u624B\u52A8\u52A0\u3002");else{let{pkg:x,changed:h}=Oe(g);if(h){let C=JSON.stringify(x,null,2)+`
|
|
82
|
-
`;p?p.after=C:w.push({file:"package.json",after:C}),m(" \u2713 package.json\uFF1A\u52A0 build:lib:lazy \u811A\u672C\u4E0E cross-env")}else m(" \xB7 package.json\uFF1Abuild:lib:lazy \u4E0E cross-env \u5DF2\u5728\uFF0C\u8DF3\u8FC7")}}}}}}R("\u2465 \u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u4F9D\u8D56 Vue3 \u517C\u5BB9\u6027\u626B\u63CF");var Q=[];{let e={};try{e=JSON.parse(P("package.json")||"{}").dependencies||{}}catch{e={}}let t=Object.keys(e).filter(n=>Se.has(n));for(let n of t){if(te[n])continue;if(ne[n]){Q.push({name:n,kind:"known",detail:ne[n].note}),m(` \u2717 ${n}\uFF1A\u5DF2\u77E5 Vue2-only \u2014\u2014 ${ne[n].note}`);continue}let s=null;try{s=JSON.parse(v.readFileSync(O(`node_modules/${n}/package.json`),"utf8"))}catch{s=null}if(!s)continue;let r=s.peerDependencies&&s.peerDependencies.vue||s.dependencies&&s.dependencies.vue||"";r&&Xt(r)&&(Q.push({name:n,kind:"suspect",detail:`\u5176 package.json \u58F0\u660E vue \u652F\u6301 "${r}"\uFF08\u53EA\u5339\u914D Vue2\uFF09`}),m(` \xB7 ${n}\uFF1A\u7591\u4F3C Vue2-only\uFF08vue="${r}"\uFF09`))}Q.length||m(" \xB7 \u672A\u53D1\u73B0\u9762\u5411 Vue2 \u7684\u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u5E93\uFF08\u4F9D\u8D56\u672A\u5B89\u88C5\u65F6\u7ED3\u679C\u4E0D\u5B8C\u6574\uFF0Cnpm i \u540E\u91CD\u8DD1\u66F4\u51C6\uFF09")}{let e=u(n=>/<template[\s>]/.test(n.replace(/<script[\s\S]*?<\/script>/gi,"").replace(/<style[\s\S]*?<\/style>/gi,"")),"hasSfcTemplate"),t=M.filter(n=>{let s=v.readFileSync(n,"utf8");return!e(s)&&/<style[^>]*\bscoped/.test(s)});if(t.length){R("\u2466 JSX \u7EC4\u4EF6 scoped \u6837\u5F0F\u5339\u914D\u590D\u6838"),m(` \u26A0 ${t.length} \u4E2A\u300C\u65E0 <template> + <style scoped>\u300D\u7EC4\u4EF6\u5F85\u590D\u6838\uFF1B\u7ED3\u6784\u547D\u4E2D\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF0C\u5148\u4FDD\u7559 scoped \u5E76\u9A8C\u8BC1\u6700\u7EC8\u4EA7\u7269\uFF08\u89C1 pitfalls F15\uFF09`);for(let n of t){let r=(v.readFileSync(n,"utf8").match(/::v-deep|:deep\(|\/deep\/|>>>/g)||[]).length;m(` \xB7 ${j.relative(T,n).replace(/\\/g,"/")}${r?`\uFF08\u542B ${r} \u5904\u6DF1\u5C42\u9009\u62E9\u5668\uFF0C\u6838\u5BF9\u5176\u4F5C\u7528\u8303\u56F4\u4E0E\u6700\u7EC8 CSS\uFF09`:""}`)}$.push(`\u3010\u6837\u5F0F\xB7\u5F85\u8FD0\u884C\u65F6\u590D\u6838\u3011${t.length} \u4E2A JSX/render \u7EC4\u4EF6\uFF08\u65E0 <template>\uFF09\u4F7F\u7528\u4E86 <style scoped>\uFF1B\u8FD9\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF0C\u9ED8\u8BA4\u4FDD\u7559 scoped\u3002\u7528\u6700\u7EC8\u4EA7\u7269\u9010\u4E2A\u6838\u5BF9\u5F02\u5E38\u5143\u7D20\u7684 DOM\u3001CSS \u9009\u62E9\u5668\u4E0E\u8BA1\u7B97\u6837\u5F0F\uFF0C\u4EC5\u4FEE\u590D\u5DF2\u8BC1\u5B9E\u7684\u95EE\u9898\u3002\u82E5\u786E\u9700\u53BB scoped\uFF0C\u5FC5\u987B\u540C\u65F6\u5B8C\u6210\u5168\u90E8\u89C4\u5219\u7684\u552F\u4E00\u547D\u540D\u7A7A\u95F4\u9694\u79BB\uFF0C\u5E76\u9A8C\u8BC1\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u53CA\u8DE8\u9875\u9762\u6837\u5F0F\u4E0D\u53D7\u5F71\u54CD\uFF1B\u672A\u9A8C\u8BC1\u9879\u4E0D\u5F97\u8BA1\u4E3A\u901A\u8FC7\uFF08\u89C1 pitfalls F15\uFF09\uFF1A${t.map(n=>j.relative(T,n).replace(/\\/g,"/")).join("\u3001")}`)}}var W=null;if(mt){R("V. webpack \u2192 Vite \u5F62\u6001\u8F6C\u6362");let e=[...w].reverse().find(i=>i.file==="package.json"&&!i.remove),t=[...w].reverse().find(i=>i.file===I&&!i.remove),s=_e({projectDir:T,read:u(i=>i===I&&t?t.after:P(i),"readForVite"),epxFrameSpec:ae,basePkgRaw:e?e.after:null});W=s.info;for(let i of s.changes){if(i.file==="package.json"&&!i.remove&&e){e.after=i.after,m(" \u2713 package.json\uFF08\u5E76\u5165 \u2460 \u4F9D\u8D56\u8FC1\u79FB\u4EA7\u51FA\uFF09");continue}w.push(i),m(` ${i.remove?"\u2717 \u5220":"\u2713"} ${i.file}`)}for(let i of s.manual)$.push(i);W.removedDeps&&W.removedDeps.length&&m(` \xB7 \u6458\u9664 webpack \u6784\u5EFA\u4F9D\u8D56 ${W.removedDeps.length} \u4E2A\uFF1A${W.removedDeps.join(", ")}`),m(` \xB7 \u7EC4\u4EF6\u76EE\u5F55 dirName='${W.dirName}'\uFF0ClazyLib glob='${W.glob}'`);let r=0,o=0;for(let i of V){let a=j.relative(T,i).replace(/\\/g,"/"),c=[...w].reverse().find(x=>x.file===a&&!x.remove),p=c?c.after:v.readFileSync(i,"utf8"),g=et(p,{isVue:i.endsWith(".vue")});g.src!==p&&(c?c.after=g.src:w.push({file:a,after:g.src}),r+=g.count,o++),g.templateAsset&&$.push(`${a}\uFF1A\u6A21\u677F\u91CC\u6709 require('\u56FE\u7247')\uFF0C\u6539\u6210\u6A21\u5757\u9876\u5C42 import \u53D8\u91CF\u540E Options API \u7684 this \u53D6\u4E0D\u5230\uFF0C\u9700\u624B\u5DE5\u6362 :src \u7ED1\u5B9A data/computed \u6216 new URL(..., import.meta.url)\u3002`)}r&&m(` \u2713 \u6E90\u7801 require.context\u2192import.meta.glob / require(\u56FE\u7247)\u2192\u9759\u6001 import\uFF1A${r} \u5904 / ${o} \u6587\u4EF6`)}R("\u8FD0\u884C\u65F6\u6807\u8BC6\uFF08runtime: vue3\uFF09");if(I){let e=[...w].reverse().find(s=>s.file===I&&!s.remove),t=e?e.after:P(I),n=st(t);n.marked?(n.src!==t&&(e?e.after=n.src:w.push({file:I,after:n.src})),m(` \u2713 ${I}\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u5305\u542B runtime: 'vue3'`)):($.push(`${I} \u672A\u80FD\u81EA\u52A8\u6DFB\u52A0 runtime \u6807\u8BC6\uFF1A${n.reason}\u3002\u8BF7\u8BA9\u9ED8\u8BA4\u5BFC\u51FA\u7684\u5E93\u5BF9\u8C61\u5305\u542B runtime: 'vue3'\uFF1B\u672A\u6807\u8BC6\u65F6\u5E73\u53F0\u4FDD\u7559\u65E7\u7248\u517C\u5BB9\u3002`),m(` \xB7 ${I}\uFF1A\u6807\u8BC6\u672A\u6CE8\u5165\uFF0C\u5DF2\u8BB0\u5F55\u4EBA\u5DE5\u6E05\u5355`))}else $.push("\u672A\u627E\u5230\u8FDC\u7A0B\u5E93\u5165\u53E3\uFF1B\u8BF7\u8BA9\u5E93\u9ED8\u8BA4\u5BFC\u51FA\u5305\u542B runtime: 'vue3'\u3002package.json \u6807\u8BC6\u4E0D\u4F1A\u5355\u72EC\u4F20\u5230\u6D4F\u89C8\u5668\u3002");R("\u65E5\u671F\u63A7\u4EF6\u683C\u5F0F\uFF08Element UI \u2192 Element Plus\uFF09");var be=[];for(let e of V){let t=j.relative(T,e),n=w.find(r=>r.file===t&&!r.remove),s=Ce(n?n.after:v.readFileSync(e,"utf8"),{filename:e});if(s.count){n?n.after=s.src:w.push({file:t,after:s.src});for(let r of s.fixes)be.push(`${t}:${r.line}\uFF1A${r.before} \u2192 ${r.after}`);m(` \u2713 ${t}\uFF1A${s.count} \u5904\u65E5\u671F\u683C\u5F0F\u4FEE\u590D`)}for(let r of s.warnings)$.push(`${t}\uFF1A${r}\uFF08F21\uFF1B\u5B8C\u6210\u683C\u5F0F\u6765\u6E90\u4FEE\u590D\u540E\u518D\u9A8C\u6536\uFF09`)}R("\u4EA7\u54C1\u4E3B\u9898\u9002\u914D\uFF08\u6D88\u8D39\u5E73\u53F0\u53D8\u91CF\uFF0C\u4FDD\u7559 scoped\uFF09");var ye=[];for(let e of[...V,...gt]){let t=j.relative(T,e),n=[...w].reverse().find(r=>r.file===t&&!r.remove),s=Fe(n?n.after:v.readFileSync(e,"utf8"),{filename:e});if(s.count){n?n.after=s.src:w.push({file:t,after:s.src});for(let r of s.fixes)ye.push(`${t}:${r.line}\uFF1A${r.before} \u2192 ${r.after}`);m(` \u2713 ${t}\uFF1A${s.count} \u5904\u4E3B\u9898\u53D8\u91CF\u9002\u914D`)}for(let r of s.warnings)$.push(`${t}\uFF1A${r}\uFF08E2\uFF1B\u8FFD\u8E2A\u5B9E\u9645\u6D88\u8D39\u573A\u666F\u540E\u5B8C\u6210\u4E3B\u9898\u9002\u914D\uFF09`)}if(_){R("@epxing \u72EC\u7ACB\u5305\u5165\u53E3\u4E0E\u4F9D\u8D56\u8FC1\u79FB");let t=pt({read:u(n=>[...w].reverse().find(s=>s.file.replaceAll("\\","/")===n&&!s.remove)?.after??P(n),"latest"),files:V.map(n=>j.relative(T,n).replaceAll("\\","/")),packagesVersion:_,cliVersion:ut,templates:qt,newVite:mt&&!["vite.config.mjs","vite.config.js","vite.config.ts"].some(n=>P(n)!=null)});he=t.blocked;for(let n of t.changes)w.push(n);$.push(...t.manual),m(t.blocked?" \u72EC\u7ACB\u5305\u5207\u6362\u9700\u8981\u4EBA\u5DE5\u5904\u7406\uFF1B\u4FDD\u7559\u539F\u5305\u5165\u53E3\uFF0C\u672A\u6DF7\u5165\u90E8\u5206\u72EC\u7ACB\u5305\u3002":` \u2713 \u72EC\u7ACB\u5305\u7248\u672C ${_}\uFF1B\u751F\u6210\u4EA7\u54C1\u4F7F\u7528\u8BF4\u660E`)}{let e=u(r=>[...w].reverse().find(o=>o.file===r&&!o.remove)?.after??P(r),"latest"),t=["vite.config.mjs","vite.config.js","vite.config.ts"].find(r=>e(r)!=null),n=JSON.parse(e("package.json")||"{}"),s=n.scripts?.["build:lib"];t&&/lazyLib\s*\(/.test(e(t))&&(["vite build","node build-lib.mjs","cross-env LAZY_LIB=true vite build"].includes(s)?e("build-lib.mjs")!=null&&e("build-lib.mjs")!==pe?$.push("build-lib.mjs \u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u8BF7\u4EBA\u5DE5\u63A5\u5165\u9ED8\u8BA4\u61D2\u52A0\u8F7D\u548C --full \u5168\u91CF\u5F00\u5173\u3002"):(n.scripts["build:lib"]="node build-lib.mjs",n.scripts["build:lib:full"]||(n.scripts["build:lib:full"]="node build-lib.mjs --full"),w.push({file:"package.json",after:JSON.stringify(n,null,2)+`
|
|
82
|
+
`;p?p.after=C:w.push({file:"package.json",after:C}),m(" \u2713 package.json\uFF1A\u52A0 build:lib:lazy \u811A\u672C\u4E0E cross-env")}else m(" \xB7 package.json\uFF1Abuild:lib:lazy \u4E0E cross-env \u5DF2\u5728\uFF0C\u8DF3\u8FC7")}}}}}}R("\u2465 \u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u4F9D\u8D56 Vue3 \u517C\u5BB9\u6027\u626B\u63CF");var Q=[];{let e={};try{e=JSON.parse(P("package.json")||"{}").dependencies||{}}catch{e={}}let t=Object.keys(e).filter(n=>Se.has(n));for(let n of t){if(te[n])continue;if(ne[n]){Q.push({name:n,kind:"known",detail:ne[n].note}),m(` \u2717 ${n}\uFF1A\u5DF2\u77E5 Vue2-only \u2014\u2014 ${ne[n].note}`);continue}let s=null;try{s=JSON.parse(v.readFileSync(O(`node_modules/${n}/package.json`),"utf8"))}catch{s=null}if(!s)continue;let r=s.peerDependencies&&s.peerDependencies.vue||s.dependencies&&s.dependencies.vue||"";r&&Xt(r)&&(Q.push({name:n,kind:"suspect",detail:`\u5176 package.json \u58F0\u660E vue \u652F\u6301 "${r}"\uFF08\u53EA\u5339\u914D Vue2\uFF09`}),m(` \xB7 ${n}\uFF1A\u7591\u4F3C Vue2-only\uFF08vue="${r}"\uFF09`))}Q.length||m(" \xB7 \u672A\u53D1\u73B0\u9762\u5411 Vue2 \u7684\u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u5E93\uFF08\u4F9D\u8D56\u672A\u5B89\u88C5\u65F6\u7ED3\u679C\u4E0D\u5B8C\u6574\uFF0Cnpm i \u540E\u91CD\u8DD1\u66F4\u51C6\uFF09")}{let e=u(n=>/<template[\s>]/.test(n.replace(/<script[\s\S]*?<\/script>/gi,"").replace(/<style[\s\S]*?<\/style>/gi,"")),"hasSfcTemplate"),t=M.filter(n=>{let s=v.readFileSync(n,"utf8");return!e(s)&&/<style[^>]*\bscoped/.test(s)});if(t.length){R("\u2466 JSX \u7EC4\u4EF6 scoped \u6837\u5F0F\u5339\u914D\u590D\u6838"),m(` \u26A0 ${t.length} \u4E2A\u300C\u65E0 <template> + <style scoped>\u300D\u7EC4\u4EF6\u5F85\u590D\u6838\uFF1B\u7ED3\u6784\u547D\u4E2D\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF0C\u5148\u4FDD\u7559 scoped \u5E76\u9A8C\u8BC1\u6700\u7EC8\u4EA7\u7269\uFF08\u89C1 pitfalls F15\uFF09`);for(let n of t){let r=(v.readFileSync(n,"utf8").match(/::v-deep|:deep\(|\/deep\/|>>>/g)||[]).length;m(` \xB7 ${j.relative(T,n).replace(/\\/g,"/")}${r?`\uFF08\u542B ${r} \u5904\u6DF1\u5C42\u9009\u62E9\u5668\uFF0C\u6838\u5BF9\u5176\u4F5C\u7528\u8303\u56F4\u4E0E\u6700\u7EC8 CSS\uFF09`:""}`)}$.push(`\u3010\u6837\u5F0F\xB7\u5F85\u8FD0\u884C\u65F6\u590D\u6838\u3011${t.length} \u4E2A JSX/render \u7EC4\u4EF6\uFF08\u65E0 <template>\uFF09\u4F7F\u7528\u4E86 <style scoped>\uFF1B\u8FD9\u4E0D\u8BC1\u660E\u6837\u5F0F\u5931\u6548\uFF0C\u9ED8\u8BA4\u4FDD\u7559 scoped\u3002\u7528\u6700\u7EC8\u4EA7\u7269\u9010\u4E2A\u6838\u5BF9\u5F02\u5E38\u5143\u7D20\u7684 DOM\u3001CSS \u9009\u62E9\u5668\u4E0E\u8BA1\u7B97\u6837\u5F0F\uFF0C\u4EC5\u4FEE\u590D\u5DF2\u8BC1\u5B9E\u7684\u95EE\u9898\u3002\u82E5\u786E\u9700\u53BB scoped\uFF0C\u5FC5\u987B\u540C\u65F6\u5B8C\u6210\u5168\u90E8\u89C4\u5219\u7684\u552F\u4E00\u547D\u540D\u7A7A\u95F4\u9694\u79BB\uFF0C\u5E76\u9A8C\u8BC1\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u53CA\u8DE8\u9875\u9762\u6837\u5F0F\u4E0D\u53D7\u5F71\u54CD\uFF1B\u672A\u9A8C\u8BC1\u9879\u4E0D\u5F97\u8BA1\u4E3A\u901A\u8FC7\uFF08\u89C1 pitfalls F15\uFF09\uFF1A${t.map(n=>j.relative(T,n).replace(/\\/g,"/")).join("\u3001")}`)}}var W=null;if(mt){R("V. webpack \u2192 Vite \u5F62\u6001\u8F6C\u6362");let e=[...w].reverse().find(i=>i.file==="package.json"&&!i.remove),t=[...w].reverse().find(i=>i.file===I&&!i.remove),s=_e({projectDir:T,read:u(i=>i===I&&t?t.after:P(i),"readForVite"),epxFrameSpec:ae,basePkgRaw:e?e.after:null});W=s.info;for(let i of s.changes){if(i.file==="package.json"&&!i.remove&&e){e.after=i.after,m(" \u2713 package.json\uFF08\u5E76\u5165 \u2460 \u4F9D\u8D56\u8FC1\u79FB\u4EA7\u51FA\uFF09");continue}w.push(i),m(` ${i.remove?"\u2717 \u5220":"\u2713"} ${i.file}`)}for(let i of s.manual)$.push(i);W.removedDeps&&W.removedDeps.length&&m(` \xB7 \u6458\u9664 webpack \u6784\u5EFA\u4F9D\u8D56 ${W.removedDeps.length} \u4E2A\uFF1A${W.removedDeps.join(", ")}`),m(` \xB7 \u7EC4\u4EF6\u76EE\u5F55 dirName='${W.dirName}'\uFF0ClazyLib glob='${W.glob}'`);let r=0,o=0;for(let i of V){let a=j.relative(T,i).replace(/\\/g,"/"),c=[...w].reverse().find(x=>x.file===a&&!x.remove),p=c?c.after:v.readFileSync(i,"utf8"),g=et(p,{isVue:i.endsWith(".vue")});g.src!==p&&(c?c.after=g.src:w.push({file:a,after:g.src}),r+=g.count,o++),g.templateAsset&&$.push(`${a}\uFF1A\u6A21\u677F\u91CC\u6709 require('\u56FE\u7247')\uFF0C\u6539\u6210\u6A21\u5757\u9876\u5C42 import \u53D8\u91CF\u540E Options API \u7684 this \u53D6\u4E0D\u5230\uFF0C\u9700\u624B\u5DE5\u6362 :src \u7ED1\u5B9A data/computed \u6216 new URL(..., import.meta.url)\u3002`)}r&&m(` \u2713 \u6E90\u7801 require.context\u2192import.meta.glob / require(\u56FE\u7247)\u2192\u9759\u6001 import\uFF1A${r} \u5904 / ${o} \u6587\u4EF6`)}R("\u8FD0\u884C\u65F6\u6807\u8BC6\uFF08runtime: vue3\uFF09");if(I){let e=[...w].reverse().find(s=>s.file===I&&!s.remove),t=e?e.after:P(I),n=st(t);n.marked?(n.src!==t&&(e?e.after=n.src:w.push({file:I,after:n.src})),m(` \u2713 ${I}\uFF1A\u9ED8\u8BA4\u5BFC\u51FA\u5305\u542B runtime: 'vue3'`)):($.push(`${I} \u672A\u80FD\u81EA\u52A8\u6DFB\u52A0 runtime \u6807\u8BC6\uFF1A${n.reason}\u3002\u8BF7\u8BA9\u9ED8\u8BA4\u5BFC\u51FA\u7684\u5E93\u5BF9\u8C61\u5305\u542B runtime: 'vue3'\uFF1B\u672A\u6807\u8BC6\u65F6\u5E73\u53F0\u4FDD\u7559\u65E7\u7248\u517C\u5BB9\u3002`),m(` \xB7 ${I}\uFF1A\u6807\u8BC6\u672A\u6CE8\u5165\uFF0C\u5DF2\u8BB0\u5F55\u4EBA\u5DE5\u6E05\u5355`))}else $.push("\u672A\u627E\u5230\u8FDC\u7A0B\u5E93\u5165\u53E3\uFF1B\u8BF7\u8BA9\u5E93\u9ED8\u8BA4\u5BFC\u51FA\u5305\u542B runtime: 'vue3'\u3002package.json \u6807\u8BC6\u4E0D\u4F1A\u5355\u72EC\u4F20\u5230\u6D4F\u89C8\u5668\u3002");R("\u65E5\u671F\u63A7\u4EF6\u683C\u5F0F\uFF08Element UI \u2192 Element Plus\uFF09");var be=[];for(let e of V){let t=j.relative(T,e),n=w.find(r=>r.file===t&&!r.remove),s=Ce(n?n.after:v.readFileSync(e,"utf8"),{filename:e});if(s.count){n?n.after=s.src:w.push({file:t,after:s.src});for(let r of s.fixes)be.push(`${t}:${r.line}\uFF1A${r.before} \u2192 ${r.after}`);m(` \u2713 ${t}\uFF1A${s.count} \u5904\u65E5\u671F\u683C\u5F0F\u4FEE\u590D`)}for(let r of s.warnings)$.push(`${t}\uFF1A${r}\uFF08F21\uFF1B\u5B8C\u6210\u683C\u5F0F\u6765\u6E90\u4FEE\u590D\u540E\u518D\u9A8C\u6536\uFF09`)}R("\u4EA7\u54C1\u4E3B\u9898\u9002\u914D\uFF08\u6D88\u8D39\u5E73\u53F0\u53D8\u91CF\uFF0C\u4FDD\u7559 scoped\uFF09");var ye=[];for(let e of[...V,...gt]){let t=j.relative(T,e),n=[...w].reverse().find(r=>r.file===t&&!r.remove),s=Fe(n?n.after:v.readFileSync(e,"utf8"),{filename:e});if(s.count){n?n.after=s.src:w.push({file:t,after:s.src});for(let r of s.fixes)ye.push(`${t}:${r.line}\uFF1A${r.before} \u2192 ${r.after}`);m(` \u2713 ${t}\uFF1A${s.count} \u5904\u4E3B\u9898\u53D8\u91CF\u9002\u914D`)}for(let r of s.warnings)$.push(`${t}\uFF1A${r}\uFF08E2\uFF1B\u8FFD\u8E2A\u5B9E\u9645\u6D88\u8D39\u573A\u666F\u540E\u5B8C\u6210\u4E3B\u9898\u9002\u914D\uFF09`)}if(_){R("@epxing \u72EC\u7ACB\u5305\u5165\u53E3\u4E0E\u4F9D\u8D56\u8FC1\u79FB");let t=pt({read:u(n=>[...w].reverse().find(s=>s.file.replaceAll("\\","/")===n&&!s.remove)?.after??P(n),"latest"),files:V.map(n=>j.relative(T,n).replaceAll("\\","/")),packagesVersion:_,cliVersion:ut,templates:qt,newVite:mt&&!["vite.config.mjs","vite.config.js","vite.config.ts"].some(n=>P(n)!=null)});he=t.blocked;for(let n of t.changes)w.push(n);$.push(...t.manual),m(t.blocked?" \u72EC\u7ACB\u5305\u5207\u6362\u9700\u8981\u4EBA\u5DE5\u5904\u7406\uFF1B\u4FDD\u7559\u539F\u5305\u5165\u53E3\uFF0C\u672A\u6DF7\u5165\u90E8\u5206\u72EC\u7ACB\u5305\u3002":` \u2713 \u72EC\u7ACB\u5305\u7248\u672C ${_}\uFF1B\u751F\u6210\u4EA7\u54C1\u4F7F\u7528\u8BF4\u660E`)}{let e=u(r=>[...w].reverse().find(o=>o.file===r&&!o.remove)?.after??P(r),"latest"),t=["vite.config.mjs","vite.config.js","vite.config.ts"].find(r=>e(r)!=null),n=JSON.parse(e("package.json")||"{}"),s=n.scripts?.["build:lib"];t&&/lazyLib\s*\(/.test(e(t))&&(["vite build","node build-lib.mjs","node build-lib.mjs --full","cross-env LAZY_LIB=true vite build"].includes(s)?e("build-lib.mjs")!=null&&e("build-lib.mjs")!==pe?$.push("build-lib.mjs \u5DF2\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\uFF0C\u8BF7\u4EBA\u5DE5\u63A5\u5165\u9ED8\u8BA4\u61D2\u52A0\u8F7D\u548C --full \u5168\u91CF\u5F00\u5173\u3002"):(n.scripts["build:lib"]="node build-lib.mjs",n.scripts["build:lib:full"]||(n.scripts["build:lib:full"]="node build-lib.mjs --full"),w.push({file:"package.json",after:JSON.stringify(n,null,2)+`
|
|
83
83
|
`}),w.push({file:"build-lib.mjs",after:pe})):$.push("build:lib \u4E3A\u81EA\u5B9A\u4E49\u547D\u4EE4\uFF0C\u8BF7\u4EBA\u5DE5\u63A5\u5165\u9ED8\u8BA4\u61D2\u52A0\u8F7D\u548C --full \u5168\u91CF\u5F00\u5173\uFF0C\u4FDD\u7559\u73B0\u6709\u6784\u5EFA\u6B65\u9AA4\u3002"))}var Kt=["# epx-migrate \u8FC1\u79FB\u62A5\u544A","",`\u9879\u76EE\uFF1A\`${j.resolve(T)}\``,`\u6A21\u5F0F\uFF1A${J?"--apply \u5DF2\u843D\u76D8":"dry-run \u672A\u843D\u76D8"}${xe?" + gogocode \u8F6C\u6362":""}`,"",..._?["## \u72EC\u7ACB\u5305\u5207\u6362","",`\u76EE\u6807\uFF1A@epxing/* ${_}\uFF0CCLI ${ut}\u3002`,he?"\u5B58\u5728\u672A\u786E\u5B9A\u7684\u65E7\u63A5\u53E3\uFF0C\u672C\u6B21\u4FDD\u7559\u65E7\u5305\u6A21\u5F0F\uFF1B\u6309\u4EBA\u5DE5\u6E05\u5355\u5904\u7406\u540E\u91CD\u65B0\u8FD0\u884C\u3002":"\u516C\u5F00\u5165\u53E3\u4E0E\u4F9D\u8D56\u5DF2\u5217\u5165\u8FC1\u79FB\u8BA1\u5212\uFF0C\u4EA7\u54C1\u4F7F\u7528\u8BF4\u660E\u89C1 PRODUCT-GUIDE.md \u6216 EPXING-PACKAGES-GUIDE.md\u3002","\u9884\u89C8\u4E0D\u4F1A\u5199\u5165\u6587\u4EF6\uFF1B\u5E94\u7528\u540E\u5B89\u88C5\u4F9D\u8D56\u5E76\u9A8C\u8BC1\u8FDC\u7A0B\u5E93\u3001\u72EC\u7ACB\u5E94\u7528\u53CA\u4E1A\u52A1\u6D41\u7A0B\u3002",""]:[],"## \u540E\u7EED\u64CD\u4F5C\u987A\u5E8F","","```bash",'git add -A && git commit -m "epx-migrate: \u4F9D\u8D56+codemod" # \u5B58\u6863\u5DE5\u5177\u6539\u52A8','npm i && git add -A && git commit -m "lockfile" # \u88C5\u65B0\u4F9D\u8D56\u5E76\u63D0\u4EA4\uFF08lock \u88AB\u8DDF\u8E2A\u65F6 --transform-vue \u7684\u5E72\u51C0\u68C0\u67E5\u9700\u8981\uFF09',...xe?[]:["# \u4EC5\u4ECD\u542B Vue2 \u7EC4\u4EF6\u7684\u4EA7\u54C1\u624D\u9700\u8981\u8FFD\u52A0 --transform-vue\uFF1B\u5DF2\u662F Vue3 \u7684\u5DE5\u7A0B\u4E0D\u91CD\u590D\u8F6C\u6362\u3002"],"npm run build:lib # \u6784\u5EFA Vue3 \u7248\u8FDC\u7A0B lib/index.js","```","","\u6784\u5EFA\u62A5\u9519\u65F6\u6309\u6587\u4EF6\u9010\u4E2A\u5904\u7406\uFF08\u6700\u5E38\u89C1\uFF1A\u5185\u8054\u4E8B\u4EF6\u591A\u8BED\u53E5\u7F3A\u5206\u53F7\u2014\u2014\u6309\u62A5\u9519\u884C\u8865 `;`\uFF09\u3002","",'\u8FD0\u884C\u65F6\u6807\u8BC6\uFF1A\u672C\u547D\u4EE4\u81EA\u52A8\u5199\u5165 package.json \u7684 `runtime: "vue3"`\uFF0C\u5E76\u7ED9\u5E93\u9ED8\u8BA4\u5BFC\u51FA\u8865\u540C\u540D\u6807\u8BC6\u3002\u6784\u5EFA\u90E8\u7F72\u540E\u8BE5\u5305\u8D70 Vue3 \u539F\u751F\u5B89\u88C5\uFF1B`vue2` \u6216\u6CA1\u6709\u6807\u8BC6\u7684\u5176\u5B83\u4EA7\u54C1/\u9879\u76EE\u5305\u7EE7\u7EED\u4F7F\u7528\u57AB\u7247\u3002\u6807\u8BC6\u8868\u793A\u8FC1\u79FB\u76EE\u6807\uFF0C\u4E0D\u4EE3\u8868\u6784\u5EFA\u6216\u4E1A\u52A1\u9A8C\u6536\u5DF2\u901A\u8FC7\uFF1B\u5B8C\u6210\u4E0B\u9762\u7684\u8F6C\u6362\u3001\u6784\u5EFA\u548C\u590D\u6D4B\u540E\u518D\u53D1\u5E03\u3002',"","npm run build:lib \u9ED8\u8BA4\u61D2\u52A0\u8F7D\uFF1Bnpm run build:lib --full \u6216 npm run build:lib:full \u663E\u5F0F\u5168\u91CF\u6784\u5EFA\u3002epxing lib --full \u4ECD\u53EF\u7528\u3002","","```bash","npm run build:lib:lazy # \u51FA index.js(\u5165\u53E3\u58F3) + chunks/ + index.full.js(\u515C\u5E95)","```","","\u26A0\uFE0F \u6309\u9700\u5F62\u6001**\u5FC5\u987B\u4E0A\u4F20\u6574\u4E2A `lib/` \u76EE\u5F55**\uFF08\u4E0D\u518D\u662F index.js + index.css \u4E24\u4E2A\u6587\u4EF6\uFF09\uFF1BFM_SYSTEM_WEBPACK \u91CC\u4ECD\u53EA\u914D index.js \u4E0E index.css \u4E24\u6761 url\u3002\u5207\u6362\u524D\u7684\u7EA6\u675F\u4E0E\u7EBF\u4E0A\u6392\u67E5\u624B\u6BB5\u89C1 epx-frame \u7684 `docs/PROJECT-GUIDE.md` \xA7\u4E09\u300C\u4E24\u79CD\u6253\u5305\u65B9\u5F0F\u300D\u3002","",..._?["## \u5E73\u53F0\u542F\u52A8\u5165\u53E3\u4E0E\u9A8C\u6536","","- \u5E73\u53F0\u4EA7\u54C1\u4F7F\u7528 createApp({ router: createFrameRouter() })\uFF0C\u4F9D\u6B21\u5B89\u88C5 Components\u3001Business \u548C\u4EA7\u54C1\u63D2\u4EF6\uFF0C\u518D mount\u3002core \u63D0\u4F9B\u8DEF\u7531\u6839\u7EC4\u4EF6\uFF1Bbusiness \u7684\u7CFB\u7EDF App \u5728\u5E94\u7528\u914D\u7F6E\u52A0\u8F7D\u540E\u8BFB\u53D6 FIRST_PAGE / MOBILE_FIRST_PAGE\u3002","- \u4EC5\u539F\u6837\u7684\u65E7\u8BA1\u6570\u6B22\u8FCE\u9875 main.js \u548C App.vue \u4F1A\u81EA\u52A8\u4FEE\u590D\uFF1B\u81EA\u5B9A\u4E49\u6839\u7EC4\u4EF6\u3001\u8DEF\u7531\u3001store \u548C HTTP \u5BA2\u6237\u7AEF\u4FDD\u7559\uFF0C\u6309\u4EA7\u54C1\u7528\u9014\u4EBA\u5DE5\u6838\u5BF9\u3002","- \u786E\u8BA4 .env.development.local \u6307\u5411\u5B9E\u9645\u540E\u7AEF\u3001\u5BA2\u6237\u7AEF\u3001\u7CFB\u7EDF\u548C\u5E94\u7528\uFF1B\u9A8C\u8BC1\u767B\u5F55\u3001\u89D2\u8272\u3001\u83DC\u5355\u3001PC/\u79FB\u52A8\u7AEF\u9996\u9875\u53CA\u4EA7\u54C1\u4E1A\u52A1\u7EC4\u4EF6\u3002","- src/main.js \u662F\u5F00\u53D1\u542F\u52A8\u5165\u53E3\uFF1Bsrc/index.js \u662F\u4EA7\u54C1\u5E93\u5165\u53E3\uFF0C\u4E0D\u80FD\u5728\u4EA7\u54C1\u5E93\u4E2D\u518D\u6B21 createApp \u6216 mount\u3002","- \u6267\u884C epxing scan . \u548C epxing verify .\uFF1B\u540E\u8005\u4F18\u5148\u8BFB\u53D6 lib \u6E05\u5355\u6216\u4EA7\u7269\uFF0C\u65E0\u4EA7\u7269\u65F6\u6839\u636E\u7EC4\u4EF6\u6536\u96C6\u5165\u53E3\u5217\u6E90\u7801\u5019\u9009\uFF0C\u4E0D\u80FD\u4EE3\u66FF\u6784\u5EFA\u540E\u53CA\u771F\u5B9E\u5E73\u53F0\u9A8C\u6536\u3002","- \u6784\u5EFA\u901A\u8FC7\u548C\u9759\u6001\u6821\u9A8C\u901A\u8FC7\u4E0D\u8868\u793A\u76EE\u6807\u73AF\u5883\u5DF2\u53D1\u5E03\u6216\u4E1A\u52A1\u5DF2\u901A\u8FC7\uFF1B\u7528\u6700\u7EC8\u4EA7\u54C1\u5E93\u5728\u771F\u5B9E\u5BBF\u4E3B\u9A8C\u6536\u3002",""]:[],"## \u2460 \u4F9D\u8D56\u8FC1\u79FB\uFF08\u5DF2\u81EA\u52A8\uFF09","- \u8FC1\u79FB\u8868\u52A0/\u5220/\u6539 + lib \u6784\u5EFA\u95ED\u5305\uFF08webpack5/vue-loader17\uFF09+ gogocode \u5DE5\u5177 + JSX/icons \u4F9D\u8D56 + \u9690\u5F0F\u4F9D\u8D56\u8865\u58F0\u660E","","### webpack.config.js \u4EBA\u5DE5\u6838\u5BF9",...Me.map(e=>`- ${e}`),"","## \u2461 codemod\uFF08\u5DF2\u81EA\u52A8\uFF09","- main.js\uFF1A`Vue.use`\u2192`app.use`\u3001`$mount`\u2192`mount`\u3001`frame.createApp()`","- index.js\uFF1A`install(Vue)`\u2192`install(app)`\u3001`Vue.component`\u2192`app.component`","- babel.config.js\uFF1A\u5220 element-ui/vant \u6309\u9700\u63D2\u4EF6 + cli preset\uFF1BJSX \u9879\u76EE\u52A0 @vue/babel-plugin-jsx","- webpack.config.js\uFF1Aexternals \u52A0 `{ vue: window.frame.Vue }`\uFF1BJSX \u9879\u76EE babel \u89C4\u5219\u6536 .jsx","- \u7A7A .vue \u8865\u6700\u5C0F\u5408\u6CD5\u5185\u5BB9","","### \u65E5\u671F\u63A7\u4EF6\u683C\u5F0F\u81EA\u52A8\u4FEE\u590D\uFF08F21\uFF1B\u4E0D\u4F9D\u8D56 gogocode\uFF09",...be.length?be.map(e=>`- ${e}`):["- \u672A\u53D1\u73B0\u53EF\u9759\u6001\u4FEE\u590D\u7684\u65E7\u683C\u5F0F\uFF1B\u52A8\u6001\u6765\u6E90\u89C1\u4EBA\u5DE5\u6E05\u5355\uFF0C\u4E0D\u4EE3\u8868\u6240\u6709\u65E5\u671F\u903B\u8F91\u5DF2\u901A\u8FC7\u3002"],"- \u53EA\u4FEE\u6539\u65E5\u671F/\u65F6\u95F4\u63A7\u4EF6 format \u4E0E value-format/valueFormat\uFF1B\u4FDD\u7559\u5206\u949F mm\u3001\u79D2 ss\u3001\u661F\u671F ddd/dddd \u548C\u65B9\u62EC\u53F7\u6587\u5B57\u3002\u4E0D\u5168\u5C40\u66FF\u6362\u540E\u7AEF/\u5176\u5B83\u65E5\u671F\u5E93\u5B57\u7B26\u4E32\u3002","- \u7528\u6700\u7EC8Vue3\u4EA7\u7269\u6838\u5BF9\u521D\u59CB\u56DE\u663E\u3001\u9009\u62E9\u65E5\u671F\u3001\u7ED1\u5B9A\u503C\u53CA\u63A5\u53E3\u65E5\u671F\u53C2\u6570\uFF1Blint/build\u901A\u8FC7\u4E0D\u80FD\u66FF\u4EE3\u65E5\u671F\u9A8C\u6536\u3002","","### \u4E3B\u9898\u9002\u914D\uFF08E2\uFF1B\u4E0D\u4F9D\u8D56 gogocode\uFF09",...ye.length?ye.map(e=>`- ${e}`):["- \u672A\u53D1\u73B0\u53EF\u5B89\u5168\u81EA\u52A8\u66FF\u6362\u7684\u9759\u6001\u4E3B\u9898\u6837\u5F0F\uFF1B\u52A8\u6001\u503C\u4E0E\u7279\u6B8A\u5C3A\u5BF8\u89C1\u4EBA\u5DE5\u6E05\u5355\u3002"],"- \u4EA7\u54C1\u53EA\u6D88\u8D39\u5E73\u53F0 --epx-* / --color-text-* \u53D8\u91CF\u5E76\u4FDD\u7559\u65E7\u503C fallback\uFF0C\u4E0D\u5BFC\u5165\u6574\u5957\u4E3B\u9898\u6216\u5199\u5168\u5C40 :root \u9ED8\u8BA4\u503C\uFF1Bscoped\u3001\u5706\u5F62/\u80F6\u56CA\u3001\u56FE\u6807\u3001\u6253\u5370\u6837\u5F0F\u4FDD\u7559\u3002","- \u7528\u6700\u7EC8\u4EA7\u7269\u5207\u6362\u5B57\u53F7\u3001\u5706\u89D2\u3001\u660E\u6697\u53CA\u5BC6\u5EA6\uFF0C\u6838\u5BF9\u4EA7\u54C1\u4E0E\u5E73\u53F0\u540C\u6B65\u3001\u61D2\u52A0\u8F7D\u524D\u540E\u53CA\u7EC4\u4EF6\u5916\u6837\u5F0F\u3002\u4E0D\u80FD\u5B89\u5168\u81EA\u52A8\u5904\u7406\u7684\u52A8\u6001\u503C\u987B\u8FFD\u8E2A\u6765\u6E90\u5E76\u4FEE\u590D\u6216\u8BB0\u5F55\u4FDD\u7559\u7406\u7531\u3002","","## \u2462 .vue \u8F6C\u6362\uFF08gogocode + \u4FEE\u8865\uFF0C\u5DF2\u81EA\u52A8\uFF09\u4E0E\u4EBA\u5DE5\u590D\u6838\u6E05\u5355\uFF08\u6570\u5B57=\u547D\u4E2D\u6587\u4EF6\u6570\uFF09",'- style \u5757\u5168\u7A0B\u5FEB\u7167\u4FDD\u62A4\uFF08gogocode \u4F1A\u6BC1 scss \u6CE8\u91CA\u5757/\u5220 style\uFF09\uFF1Bicons \u5305\u540D\u6539\u5199\uFF1BJSX \u6807 lang="jsx"',...Object.entries(yt).filter(([,e])=>e>0).map(([e,t])=>`- [ ] **${t} \u6587\u4EF6**\uFF1A${e}`),"","### \u5176\u5B83\u4EBA\u5DE5\u9879",...$.length?$.map(e=>`- [ ] ${e}`):["- \uFF08\u65E0\uFF09"],"","## \u2465 \u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u4F9D\u8D56\uFF08Vue3 \u517C\u5BB9\u6027\uFF09",...Q.length?["> Vue3 \u4EA7\u7269\u4E0D\u8D70\u5E73\u53F0 vue2-remote-shim \u57AB\u7247\uFF0C\u9762\u5411 Vue2 \u7684\u7B2C\u4E09\u65B9\u8FD0\u884C\u65F6\u5E93\u4F1A**\u8FD0\u884C\u65F6\u5D29**\uFF08\u5982\u7EC4\u7EC7\u67B6\u6784\u56FE `_c`\uFF09\u3002\u53EA\u80FD\u6362\u5E93/\u81EA\u5C01\u88C5\uFF0C\u5DE5\u5177\u4E0D\u81EA\u52A8\u6539\u3002","",...Q.map(e=>`- [ ] ${e.kind==="known"?"**\u786E\u5B9A\u4E0D\u517C\u5BB9**":"\u7591\u4F3C"} \`${e.name}\`\uFF1A${e.detail}`)]:["- \uFF08\u672A\u53D1\u73B0\uFF1B\u4F9D\u8D56\u672A\u5B89\u88C5\u65F6\u7ED3\u679C\u4E0D\u5B8C\u6574\uFF0C`npm i` \u540E\u91CD\u8DD1\u66F4\u51C6\uFF09"],"","## \u53C2\u7167","- \u5E73\u53F0\u8FC1\u79FB\u8BB0\u6863\uFF1A`epx-frame/docs/migration/`\uFF08\u540C\u6B3E\u5751\uFF09","- **\u6784\u5EFA\u901A\u8FC7 \u2260 \u8FD0\u884C\u7B49\u4EF7**\uFF1A\u4E0A\u5E73\u53F0\u771F\u73AF\u5883\u70B9\u5173\u952E\u9875\u9762\uFF08\u5217\u8868/\u8868\u5355/\u5F39\u7A97/\u6D41\u7A0B\uFF09\uFF1BJSX \u7684 scopedSlots \u7B49 Vue2 \u8BED\u4E49\u91CD\u70B9\u770B","- **\u6837\u5F0F\u9694\u79BB\u9A8C\u6536**\uFF1A\u9ED8\u8BA4\u4FDD\u7559 scoped\uFF1B\u8C03\u6574\u4F5C\u7528\u57DF\u65F6\uFF0C\u987B\u7528\u6700\u7EC8\u61D2\u52A0\u8F7D\u4EA7\u7269\u68C0\u67E5\u7EC4\u4EF6\u5185\u6548\u679C\u3001\u52A0\u8F7D\u524D\u540E\u7EC4\u4EF6\u5916\u540C\u540D\u5143\u7D20\u53CA\u79BB\u5F00\u9875\u9762\u540E\u7684\u5176\u4ED6\u9875\u9762\u3002\u6784\u5EFA\u6216\u9759\u6001\u626B\u63CF\u901A\u8FC7\u4E0D\u80FD\u66FF\u4EE3\u9694\u79BB\u56DE\u5F52\uFF1B\u672A\u6D4B\u9879\u8BB0\u5F55\u4E3A\u5F85\u9A8C\u8BC1\u3002","- \u6682\u4E0D\u91CD\u5EFA\u7684\u8001\u5E93\uFF1A\u5E73\u53F0\u4FA7 Vue2 \u57AB\u7247\u515C\u5E95\uFF08`INCLUDE_VUE2_COMPAT`\uFF09",""].join(`
|
|
84
84
|
`);w.push({file:"MIGRATION-REPORT.md",after:Kt});R(J?"\u843D\u76D8\uFF08--apply\uFF09":"DRY-RUN\uFF08\u672A\u5199\u6587\u4EF6\uFF09");for(let e of w){let t=O(e.file);if(e.remove){J&&!ge?(v.rmSync(t,{force:!0}),m(` \u2717 \u5220 ${e.file}`)):m(` [dry-run] \u5C06\u5220 ${e.file}`);continue}J&&!ge?(v.mkdirSync(j.dirname(t),{recursive:!0}),v.writeFileSync(t,e.after),m(` \u2713 \u5199 ${e.file}`)):ge&&e.file==="MIGRATION-REPORT.md"?(v.writeFileSync(t,e.after),m(` \u2713 \u5199 ${e.file}`)):m(` [dry-run] \u5C06\u6539 ${e.file}`)}m(`
|
|
85
85
|
\u5B8C\u6210\u3002${J?"\u5DF2\u843D\u76D8\uFF0C\u7528 git diff \u5BA1\u67E5\u3002":"dry-run\uFF1B--apply \u843D\u76D8\u3002"}\u4EBA\u5DE5\u6E05\u5355\u89C1 MIGRATION-REPORT.md\u3002`);he&&(process.exitCode=2);
|