From 22658d5f7746237bb90ccbb5435404e7e46ac221 Mon Sep 17 00:00:00 2001
From: CrystalAngelLee <34746593+CrystalAngelLee@users.noreply.github.com>
Date: Fri, 1 Mar 2024 09:16:07 +0000
Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20micro-zo?=
=?UTF-8?q?e/doc@43a4c0ef41b8889fe6a40d992bbc3f8e9a6507dc=20=F0=9F=9A=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
404.html | 34 +
assets/404.html-W3ROBeu3.js | 1 +
assets/404.html-r6aI8Oiv.js | 1 +
assets/SearchBox-n8n3yupc.js | 2582 ++++++++++++++++++++
assets/TabPanel-eK3zFmTe.js | 1 +
assets/Tabs-2ZIgWyuj.js | 1 +
assets/advanced.html-8lBhKnOO.js | 1 +
assets/advanced.html-VDOL8mUc.js | 27 +
assets/advanced.html-Ykowo3Si.js | 212 ++
assets/advanced.html-lwN5sp0A.js | 1 +
assets/angular.html-DTdlYrnT.js | 96 +
assets/angular.html-IiiW44mY.js | 1 +
assets/angular.html-WP7D2Cen.js | 94 +
assets/angular.html-aQEs872j.js | 1 +
assets/api.html-4PhXQPBB.js | 308 +++
assets/api.html-SdvbuWi8.js | 1 +
assets/api.html-Y5qtm1CX.js | 411 ++++
assets/api.html-c18i07f5.js | 1 +
assets/app-Js4EkCke.js | 45 +
assets/browser-router.html-iOfceu2T.js | 1 +
assets/browser-router.html-uQUsMA4m.js | 101 +
assets/changelog.html-1Wf-JjiW.js | 1 +
assets/changelog.html-AHVfoRMK.js | 1 +
assets/changelog.html-iCHTFakL.js | 1 +
assets/changelog.html-xDAfa4YK.js | 1 +
assets/chat.html-5f0b2egw.js | 1 +
assets/chat.html-POIboIWO.js | 1 +
assets/chat.html-a3PK1czF.js | 1 +
assets/chat.html-nlzNuE0E.js | 1 +
assets/configure.html-Ro8Rkchw.js | 1 +
assets/configure.html-RqRlT9wJ.js | 1 +
assets/configure.html-kgkqCc7P.js | 38 +
assets/configure.html-v3HE5CKp.js | 50 +
assets/data.html-1rctA2wa.js | 1 +
assets/data.html-SpNZ3Su9.js | 1 +
assets/data.html-T6p6wnGE.js | 338 +++
assets/data.html-eQUteya5.js | 173 ++
assets/deploy.html-3U3dS4j-.js | 284 +++
assets/deploy.html-54LrNdJ4.js | 1 +
assets/deploy.html-PU_zO6Gy.js | 284 +++
assets/deploy.html-kMtlBVqX.js | 1 +
assets/dom-scope.html-FWA8xDxv.js | 27 +
assets/dom-scope.html-HMImstrO.js | 27 +
assets/dom-scope.html-xTKBTwKP.js | 1 +
assets/dom-scope.html-yYuUPeWx.js | 1 +
assets/env.html-7gfCbI7i.js | 11 +
assets/env.html-8JApIGxf.js | 11 +
assets/env.html-H3pl84T6.js | 1 +
assets/env.html-_CZoaD0L.js | 1 +
assets/github-logo-82G4Druu.png | Bin 0 -> 5883 bytes
assets/iconfont-1rED76EJ.svg | 31 +
assets/index.html-O7B9r6ZF.js | 1 +
assets/index.html-Y8HtG0hU.js | 1 +
assets/index.html-dGdgTFVP.js | 1 +
assets/index.html-dVWepa6Q.js | 1 +
assets/index.html-mBsbhORD.js | 1 +
assets/index.html-xx8-gABf.js | 1 +
assets/introduce.html-1pnm53JU.js | 1 +
assets/introduce.html-BOF-buQI.js | 1 +
assets/introduce.html-Ka7TJdAD.js | 1 +
assets/introduce.html-ZQEiApf6.js | 1 +
assets/jump.html-EtMtPtsK.js | 1 +
assets/jump.html-OtWkbMSs.js | 67 +
assets/jump.html-RwDRiXLl.js | 1 +
assets/jump.html-xwHnW841.js | 67 +
assets/keep-alive.html-IyrSSegK.js | 1 +
assets/keep-alive.html-gqtXNilR.js | 1 +
assets/keep-alive.html-sqPDnWv-.js | 67 +
assets/keep-alive.html-vNu_laKU.js | 67 +
assets/life-cycles.html-Ibf2XnPg.js | 1 +
assets/life-cycles.html-aMvzBg6z.js | 106 +
assets/life-cycles.html-gYONgHC0.js | 92 +
assets/life-cycles.html-xul7p7bL.js | 1 +
assets/micro-app-devtools.html-0lgUS4mT.js | 1 +
assets/micro-app-devtools.html-ORO5BGq-.js | 6 +
assets/nest.html-DLs2tw7Y.js | 1 +
assets/nest.html-Onsc0PO2.js | 5 +
assets/nest.html-aobsS9nx.js | 5 +
assets/nest.html-k6keLSEl.js | 1 +
assets/nextjs.html--NRrJ-lW.js | 108 +
assets/nextjs.html-1Gm1t1WA.js | 1 +
assets/nextjs.html-BvHpnTic.js | 1 +
assets/nextjs.html-Q7Q6isam.js | 129 +
assets/nuxtjs.html-CGTf2UAP.js | 1 +
assets/nuxtjs.html-HBrcFwo1.js | 125 +
assets/nuxtjs.html-_xU2FpJE.js | 1 +
assets/nuxtjs.html-xGBOh7Rg.js | 139 ++
assets/one-line-KSaQOrSe.png | Bin 0 -> 7449 bytes
assets/plugins.html-96BIgQEf.js | 1 +
assets/plugins.html-GLLsGxQQ.js | 111 +
assets/plugins.html-jPyI4SAM.js | 133 +
assets/plugins.html-kau92qxc.js | 1 +
assets/prefetch.html-Liri2OuL.js | 1 +
assets/prefetch.html-bLJxSBeS.js | 1 +
assets/prefetch.html-kcai4h6U.js | 29 +
assets/prefetch.html-yWWJkSH6.js | 73 +
assets/questions.html-KJ9Dte0k.js | 40 +
assets/questions.html-R8v65BZz.js | 1 +
assets/questions.html-ZnFKMR-Q.js | 73 +
assets/questions.html-hUoJlWlA.js | 1 +
assets/react-code-NNxlGy_j.png | Bin 0 -> 16108 bytes
assets/react-logo-Pkq-Ze0s.png | Bin 0 -> 9905 bytes
assets/react.html-M1fLfxYD.js | 1 +
assets/react.html-_LN1hZNt.js | 64 +
assets/react.html-svUOYJhn.js | 72 +
assets/react.html-vZgjfMge.js | 1 +
assets/route.html-fyv-4MnK.js | 101 +
assets/route.html-wkjyoRYU.js | 1 +
assets/router.html-DfwzMfdM.js | 1 +
assets/router.html-sPEOwMDk.js | 318 +++
assets/sandbox.html-ARDqaq7_.js | 20 +
assets/sandbox.html-IFCA06aL.js | 1 +
assets/sandbox.html-U77e7mDi.js | 15 +
assets/sandbox.html-qzFNu9Om.js | 1 +
assets/scopecss.html-8opR6X9Q.js | 1 +
assets/scopecss.html-Dzrw-r2o.js | 43 +
assets/scopecss.html-EB6b1boc.js | 43 +
assets/scopecss.html-ZJ-AYehS.js | 1 +
assets/start.html-OB75N4vI.js | 1 +
assets/start.html-WU_dlk_H.js | 1 +
assets/start.html-l63i5ZjC.js | 94 +
assets/start.html-uagqa8OO.js | 27 +
assets/static-source.html-LFeOrpI8.js | 33 +
assets/static-source.html-aI58MGFt.js | 22 +
assets/static-source.html-j5q2v0Oa.js | 1 +
assets/static-source.html-zzjKqXFq.js | 1 +
assets/style-TViHLHYl.css | 1 +
assets/transfer.html-6VmZFm5W.js | 1 +
assets/transfer.html-BPyzateb.js | 10 +
assets/vite.html-1W0b0T2E.js | 1 +
assets/vite.html-25IY98hs.js | 1 +
assets/vite.html-5EmFUsPM.js | 6 +
assets/vite.html-Z8GtXfLe.js | 96 +
assets/vue-code-DIuGtS43.png | Bin 0 -> 19392 bytes
assets/vue.html-PwHvw9XK.js | 1 +
assets/vue.html-S9oml0bV.js | 167 ++
assets/vue.html-qiEkYbNu.js | 1 +
assets/vue.html-rli8XhTr.js | 162 ++
images/logo.png | Bin 0 -> 1712 bytes
index.html | 34 +
v0/zh/advanced.html | 245 ++
v0/zh/api.html | 341 +++
v0/zh/changelog.html | 34 +
v0/zh/chat.html | 34 +
v0/zh/configure.html | 71 +
v0/zh/data.html | 206 ++
v0/zh/deploy.html | 317 +++
v0/zh/dom-scope.html | 60 +
v0/zh/env.html | 44 +
v0/zh/framework/angular.html | 127 +
v0/zh/framework/introduce.html | 34 +
v0/zh/framework/nextjs.html | 162 ++
v0/zh/framework/nuxtjs.html | 172 ++
v0/zh/framework/react.html | 105 +
v0/zh/framework/vite.html | 129 +
v0/zh/framework/vue.html | 200 ++
v0/zh/index.html | 34 +
v0/zh/jump.html | 100 +
v0/zh/keep-alive.html | 100 +
v0/zh/life-cycles.html | 125 +
v0/zh/nest.html | 38 +
v0/zh/plugins.html | 144 ++
v0/zh/prefetch.html | 62 +
v0/zh/questions.html | 106 +
v0/zh/route.html | 134 +
v0/zh/sandbox.html | 48 +
v0/zh/scopecss.html | 76 +
v0/zh/start.html | 127 +
v0/zh/static-source.html | 55 +
zh/advanced.html | 60 +
zh/api.html | 444 ++++
zh/browser-router.html | 134 +
zh/changelog.html | 34 +
zh/chat.html | 34 +
zh/configure.html | 83 +
zh/data.html | 371 +++
zh/deploy.html | 317 +++
zh/dom-scope.html | 60 +
zh/env.html | 44 +
zh/framework/angular.html | 129 +
zh/framework/introduce.html | 34 +
zh/framework/nextjs.html | 141 ++
zh/framework/nuxtjs.html | 158 ++
zh/framework/react.html | 97 +
zh/framework/vite.html | 39 +
zh/framework/vue.html | 195 ++
zh/index.html | 34 +
zh/jump.html | 100 +
zh/keep-alive.html | 100 +
zh/life-cycles.html | 139 ++
zh/micro-app-devtools.html | 39 +
zh/nest.html | 38 +
zh/plugins.html | 166 ++
zh/prefetch.html | 106 +
zh/questions.html | 73 +
zh/router.html | 351 +++
zh/sandbox.html | 53 +
zh/scopecss.html | 76 +
zh/start.html | 60 +
zh/static-source.html | 66 +
zh/transfer.html | 43 +
201 files changed, 15277 insertions(+)
create mode 100644 404.html
create mode 100644 assets/404.html-W3ROBeu3.js
create mode 100644 assets/404.html-r6aI8Oiv.js
create mode 100644 assets/SearchBox-n8n3yupc.js
create mode 100644 assets/TabPanel-eK3zFmTe.js
create mode 100644 assets/Tabs-2ZIgWyuj.js
create mode 100644 assets/advanced.html-8lBhKnOO.js
create mode 100644 assets/advanced.html-VDOL8mUc.js
create mode 100644 assets/advanced.html-Ykowo3Si.js
create mode 100644 assets/advanced.html-lwN5sp0A.js
create mode 100644 assets/angular.html-DTdlYrnT.js
create mode 100644 assets/angular.html-IiiW44mY.js
create mode 100644 assets/angular.html-WP7D2Cen.js
create mode 100644 assets/angular.html-aQEs872j.js
create mode 100644 assets/api.html-4PhXQPBB.js
create mode 100644 assets/api.html-SdvbuWi8.js
create mode 100644 assets/api.html-Y5qtm1CX.js
create mode 100644 assets/api.html-c18i07f5.js
create mode 100644 assets/app-Js4EkCke.js
create mode 100644 assets/browser-router.html-iOfceu2T.js
create mode 100644 assets/browser-router.html-uQUsMA4m.js
create mode 100644 assets/changelog.html-1Wf-JjiW.js
create mode 100644 assets/changelog.html-AHVfoRMK.js
create mode 100644 assets/changelog.html-iCHTFakL.js
create mode 100644 assets/changelog.html-xDAfa4YK.js
create mode 100644 assets/chat.html-5f0b2egw.js
create mode 100644 assets/chat.html-POIboIWO.js
create mode 100644 assets/chat.html-a3PK1czF.js
create mode 100644 assets/chat.html-nlzNuE0E.js
create mode 100644 assets/configure.html-Ro8Rkchw.js
create mode 100644 assets/configure.html-RqRlT9wJ.js
create mode 100644 assets/configure.html-kgkqCc7P.js
create mode 100644 assets/configure.html-v3HE5CKp.js
create mode 100644 assets/data.html-1rctA2wa.js
create mode 100644 assets/data.html-SpNZ3Su9.js
create mode 100644 assets/data.html-T6p6wnGE.js
create mode 100644 assets/data.html-eQUteya5.js
create mode 100644 assets/deploy.html-3U3dS4j-.js
create mode 100644 assets/deploy.html-54LrNdJ4.js
create mode 100644 assets/deploy.html-PU_zO6Gy.js
create mode 100644 assets/deploy.html-kMtlBVqX.js
create mode 100644 assets/dom-scope.html-FWA8xDxv.js
create mode 100644 assets/dom-scope.html-HMImstrO.js
create mode 100644 assets/dom-scope.html-xTKBTwKP.js
create mode 100644 assets/dom-scope.html-yYuUPeWx.js
create mode 100644 assets/env.html-7gfCbI7i.js
create mode 100644 assets/env.html-8JApIGxf.js
create mode 100644 assets/env.html-H3pl84T6.js
create mode 100644 assets/env.html-_CZoaD0L.js
create mode 100644 assets/github-logo-82G4Druu.png
create mode 100644 assets/iconfont-1rED76EJ.svg
create mode 100644 assets/index.html-O7B9r6ZF.js
create mode 100644 assets/index.html-Y8HtG0hU.js
create mode 100644 assets/index.html-dGdgTFVP.js
create mode 100644 assets/index.html-dVWepa6Q.js
create mode 100644 assets/index.html-mBsbhORD.js
create mode 100644 assets/index.html-xx8-gABf.js
create mode 100644 assets/introduce.html-1pnm53JU.js
create mode 100644 assets/introduce.html-BOF-buQI.js
create mode 100644 assets/introduce.html-Ka7TJdAD.js
create mode 100644 assets/introduce.html-ZQEiApf6.js
create mode 100644 assets/jump.html-EtMtPtsK.js
create mode 100644 assets/jump.html-OtWkbMSs.js
create mode 100644 assets/jump.html-RwDRiXLl.js
create mode 100644 assets/jump.html-xwHnW841.js
create mode 100644 assets/keep-alive.html-IyrSSegK.js
create mode 100644 assets/keep-alive.html-gqtXNilR.js
create mode 100644 assets/keep-alive.html-sqPDnWv-.js
create mode 100644 assets/keep-alive.html-vNu_laKU.js
create mode 100644 assets/life-cycles.html-Ibf2XnPg.js
create mode 100644 assets/life-cycles.html-aMvzBg6z.js
create mode 100644 assets/life-cycles.html-gYONgHC0.js
create mode 100644 assets/life-cycles.html-xul7p7bL.js
create mode 100644 assets/micro-app-devtools.html-0lgUS4mT.js
create mode 100644 assets/micro-app-devtools.html-ORO5BGq-.js
create mode 100644 assets/nest.html-DLs2tw7Y.js
create mode 100644 assets/nest.html-Onsc0PO2.js
create mode 100644 assets/nest.html-aobsS9nx.js
create mode 100644 assets/nest.html-k6keLSEl.js
create mode 100644 assets/nextjs.html--NRrJ-lW.js
create mode 100644 assets/nextjs.html-1Gm1t1WA.js
create mode 100644 assets/nextjs.html-BvHpnTic.js
create mode 100644 assets/nextjs.html-Q7Q6isam.js
create mode 100644 assets/nuxtjs.html-CGTf2UAP.js
create mode 100644 assets/nuxtjs.html-HBrcFwo1.js
create mode 100644 assets/nuxtjs.html-_xU2FpJE.js
create mode 100644 assets/nuxtjs.html-xGBOh7Rg.js
create mode 100644 assets/one-line-KSaQOrSe.png
create mode 100644 assets/plugins.html-96BIgQEf.js
create mode 100644 assets/plugins.html-GLLsGxQQ.js
create mode 100644 assets/plugins.html-jPyI4SAM.js
create mode 100644 assets/plugins.html-kau92qxc.js
create mode 100644 assets/prefetch.html-Liri2OuL.js
create mode 100644 assets/prefetch.html-bLJxSBeS.js
create mode 100644 assets/prefetch.html-kcai4h6U.js
create mode 100644 assets/prefetch.html-yWWJkSH6.js
create mode 100644 assets/questions.html-KJ9Dte0k.js
create mode 100644 assets/questions.html-R8v65BZz.js
create mode 100644 assets/questions.html-ZnFKMR-Q.js
create mode 100644 assets/questions.html-hUoJlWlA.js
create mode 100644 assets/react-code-NNxlGy_j.png
create mode 100644 assets/react-logo-Pkq-Ze0s.png
create mode 100644 assets/react.html-M1fLfxYD.js
create mode 100644 assets/react.html-_LN1hZNt.js
create mode 100644 assets/react.html-svUOYJhn.js
create mode 100644 assets/react.html-vZgjfMge.js
create mode 100644 assets/route.html-fyv-4MnK.js
create mode 100644 assets/route.html-wkjyoRYU.js
create mode 100644 assets/router.html-DfwzMfdM.js
create mode 100644 assets/router.html-sPEOwMDk.js
create mode 100644 assets/sandbox.html-ARDqaq7_.js
create mode 100644 assets/sandbox.html-IFCA06aL.js
create mode 100644 assets/sandbox.html-U77e7mDi.js
create mode 100644 assets/sandbox.html-qzFNu9Om.js
create mode 100644 assets/scopecss.html-8opR6X9Q.js
create mode 100644 assets/scopecss.html-Dzrw-r2o.js
create mode 100644 assets/scopecss.html-EB6b1boc.js
create mode 100644 assets/scopecss.html-ZJ-AYehS.js
create mode 100644 assets/start.html-OB75N4vI.js
create mode 100644 assets/start.html-WU_dlk_H.js
create mode 100644 assets/start.html-l63i5ZjC.js
create mode 100644 assets/start.html-uagqa8OO.js
create mode 100644 assets/static-source.html-LFeOrpI8.js
create mode 100644 assets/static-source.html-aI58MGFt.js
create mode 100644 assets/static-source.html-j5q2v0Oa.js
create mode 100644 assets/static-source.html-zzjKqXFq.js
create mode 100644 assets/style-TViHLHYl.css
create mode 100644 assets/transfer.html-6VmZFm5W.js
create mode 100644 assets/transfer.html-BPyzateb.js
create mode 100644 assets/vite.html-1W0b0T2E.js
create mode 100644 assets/vite.html-25IY98hs.js
create mode 100644 assets/vite.html-5EmFUsPM.js
create mode 100644 assets/vite.html-Z8GtXfLe.js
create mode 100644 assets/vue-code-DIuGtS43.png
create mode 100644 assets/vue.html-PwHvw9XK.js
create mode 100644 assets/vue.html-S9oml0bV.js
create mode 100644 assets/vue.html-qiEkYbNu.js
create mode 100644 assets/vue.html-rli8XhTr.js
create mode 100644 images/logo.png
create mode 100644 index.html
create mode 100644 v0/zh/advanced.html
create mode 100644 v0/zh/api.html
create mode 100644 v0/zh/changelog.html
create mode 100644 v0/zh/chat.html
create mode 100644 v0/zh/configure.html
create mode 100644 v0/zh/data.html
create mode 100644 v0/zh/deploy.html
create mode 100644 v0/zh/dom-scope.html
create mode 100644 v0/zh/env.html
create mode 100644 v0/zh/framework/angular.html
create mode 100644 v0/zh/framework/introduce.html
create mode 100644 v0/zh/framework/nextjs.html
create mode 100644 v0/zh/framework/nuxtjs.html
create mode 100644 v0/zh/framework/react.html
create mode 100644 v0/zh/framework/vite.html
create mode 100644 v0/zh/framework/vue.html
create mode 100644 v0/zh/index.html
create mode 100644 v0/zh/jump.html
create mode 100644 v0/zh/keep-alive.html
create mode 100644 v0/zh/life-cycles.html
create mode 100644 v0/zh/nest.html
create mode 100644 v0/zh/plugins.html
create mode 100644 v0/zh/prefetch.html
create mode 100644 v0/zh/questions.html
create mode 100644 v0/zh/route.html
create mode 100644 v0/zh/sandbox.html
create mode 100644 v0/zh/scopecss.html
create mode 100644 v0/zh/start.html
create mode 100644 v0/zh/static-source.html
create mode 100644 zh/advanced.html
create mode 100644 zh/api.html
create mode 100644 zh/browser-router.html
create mode 100644 zh/changelog.html
create mode 100644 zh/chat.html
create mode 100644 zh/configure.html
create mode 100644 zh/data.html
create mode 100644 zh/deploy.html
create mode 100644 zh/dom-scope.html
create mode 100644 zh/env.html
create mode 100644 zh/framework/angular.html
create mode 100644 zh/framework/introduce.html
create mode 100644 zh/framework/nextjs.html
create mode 100644 zh/framework/nuxtjs.html
create mode 100644 zh/framework/react.html
create mode 100644 zh/framework/vite.html
create mode 100644 zh/framework/vue.html
create mode 100644 zh/index.html
create mode 100644 zh/jump.html
create mode 100644 zh/keep-alive.html
create mode 100644 zh/life-cycles.html
create mode 100644 zh/micro-app-devtools.html
create mode 100644 zh/nest.html
create mode 100644 zh/plugins.html
create mode 100644 zh/prefetch.html
create mode 100644 zh/questions.html
create mode 100644 zh/router.html
create mode 100644 zh/sandbox.html
create mode 100644 zh/scopecss.html
create mode 100644 zh/start.html
create mode 100644 zh/static-source.html
create mode 100644 zh/transfer.html
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..16d5c0c
--- /dev/null
+++ b/404.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+ MicroApp
+
+
+
+
+
+
+
+
+
diff --git a/assets/404.html-W3ROBeu3.js b/assets/404.html-W3ROBeu3.js
new file mode 100644
index 0000000..cb2d495
--- /dev/null
+++ b/assets/404.html-W3ROBeu3.js
@@ -0,0 +1 @@
+import{_ as e,o as c,c as t}from"./app-Js4EkCke.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default};
diff --git a/assets/404.html-r6aI8Oiv.js b/assets/404.html-r6aI8Oiv.js
new file mode 100644
index 0000000..5a0b8de
--- /dev/null
+++ b/assets/404.html-r6aI8Oiv.js
@@ -0,0 +1 @@
+const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data};
diff --git a/assets/SearchBox-n8n3yupc.js b/assets/SearchBox-n8n3yupc.js
new file mode 100644
index 0000000..e546ebc
--- /dev/null
+++ b/assets/SearchBox-n8n3yupc.js
@@ -0,0 +1,2582 @@
+import{g as w,j as y,k as O,f as M,t as N,l as L,m as S,_ as I,o as m,c as d,p as z,v as T,d as f,n as _,q as x,F as C,s as k,x as R,y as b,z as F}from"./app-Js4EkCke.js";const B=[{path:"/",title:"",pathLocale:"/",contents:[]},{path:"/zh/",title:"",pathLocale:"/",contents:[{header:"微前端",slug:"微前端",content:`微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用融合为一个完整的应用,或者将原本运行已久、没有关联的几个应用融合为一个应用。微前端既可以将多个项目融合为一,又可以减少项目之间的耦合,提升项目扩展性,相比一整块的前端仓库,微前端架构下的前端仓库倾向于更小更灵活。
+它主要解决了两个问题: 1、随着项目迭代应用越来越庞大,难以维护。
+2、跨团队或跨部门协作开发项目导致效率低下的问题。`},{header:"关于micro-app",slug:"关于micro-app",content:`在micro-app之前,业内已经有一些开源的微前端框架,比较流行的有2个:single-spa和qiankun。
+single-spa是通过监听 url change 事件,在路由变化时匹配到渲染的子应用并进行渲染,这个思路也是目前实现微前端的主流方式。同时single-spa要求子应用修改渲染逻辑并暴露出三个方法:bootstrap、mount、unmount,分别对应初始化、渲染和卸载,这也导致子应用需要对入口文件进行修改。因为qiankun是基于single-spa进行封装,所以这些特点也被qiankun继承下来,并且需要对webpack配置进行一些修改。
+micro-app并没有沿袭single-spa的思路,而是借鉴了WebComponent的思想,通过CustomElement结合自定义的ShadowDom,将微前端封装成一个类WebComponent组件,从而实现微前端的组件化渲染。并且由于自定义ShadowDom的隔离特性,micro-app不需要像single-spa和qiankun一样要求子应用修改渲染逻辑并暴露出方法,也不需要修改webpack配置,是目前市面上接入微前端成本最低的方案。`},{header:"概念图",slug:"概念图",content:""},{header:"micro-app的优势",slug:"micro-app的优势",content:""},{header:"1、使用简单",slug:"_1、使用简单",content:"我们将所有功能都封装到一个类WebComponent组件中,从而实现在基座应用中嵌入一行代码即可渲染一个微前端应用。"},{header:"2、功能强大",slug:"_2、功能强大",content:"micro-app提供了js沙箱、样式隔离、元素隔离、路由隔离、预加载、数据通信等一系列完善的功能。"},{header:"3、兼容所有框架",slug:"_3、兼容所有框架",content:"为了保证各个业务之间独立开发、独立部署的能力,micro-app做了诸多兼容,在任何前端框架中都可以正常运行。"}]},{path:"/zh/advanced.html",title:"高级功能",pathLocale:"/",contents:[{header:"高级功能",slug:"高级功能",content:""},{header:"1、自定义fetch",slug:"_1、自定义fetch",content:`通过自定义fetch替换框架自带的fetch,可以修改fetch配置(添加cookie或header信息等等),或拦截HTML、JS、CSS等静态资源。
+自定义的fetch必须是一个返回string类型的Promise。
+import microApp from '@micro-zoe/micro-app' microApp.start({ /** * 自定义fetch * @param {string} url 静态资源地址 * @param {object} options fetch请求配置项 * @param {string|null} appName 应用名称 * @returns Promise */ fetch (url, options, appName) { if (url === 'http://localhost:3001/error.js') { // 删除 http://localhost:3001/error.js 的内容 return Promise.resolve('') } const config = { // fetch 默认不带cookie,如果需要添加cookie需要配置credentials credentials: 'include', // 请求时带上cookie } return window.fetch(url, Object.assign(options, config)).then((res) => { return res.text() }) }
+})
+Note 如果跨域请求带cookie,那么Access-Control-Allow-Origin不能设置为*,必须指定域名,同时设置Access-Control-Allow-Credentials: true`}]},{path:"/zh/api.html",title:"",pathLocale:"/",contents:[{header:"start",slug:"start",content:"描述: micro-app注册函数,全局执行一次\n介绍:\nstart (options?: { tagName?: string, // 标签名称,默认为micro-app shadowDOM?: boolean, // 是否开启shadowDOM,默认为false destroy?: boolean, // 是否在子应用卸载时强制销毁所有缓存资源,默认为false inline?: boolean, // 是否使用内联script方式执行js,默认为false disableScopecss?: boolean, // 是否全局禁用样式隔离,默认为false disableSandbox?: boolean, // 是否全局禁用沙箱,默认为false ssr?: boolean, // 是否全局启用ssr模式,默认为false // 全局生命周期 lifeCycles?: { created?(e?: CustomEvent): void beforemount?(e?: CustomEvent): void mounted?(e?: CustomEvent): void unmount?(e?: CustomEvent): void error?(e?: CustomEvent): void }, // 预加载,支持数组或函数 preFetchApps?: Array<{ name: string, url: string, disableScopecss?: boolean, disableSandbox?: boolean, shadowDOM?: boolean }> | (() => Array<{ name: string, url: string, disableScopecss?: boolean, disableSandbox?: boolean, shadowDOM?: boolean }>), // 插件系统,用于处理子应用的js文件 plugins?: { // 全局插件,作用于所有子应用的js文件 global?: Array<{ // 可选,强隔离的全局变量(默认情况下子应用无法找到的全局变量会兜底到主应用中,scopeProperties可以禁止这种情况) scopeProperties?: string[], // 可选,可以逃逸到外部的全局变量(escapeProperties中的变量会同时赋值到子应用和外部真实的window上) escapeProperties?: string[], // 可选,如果函数返回 `true` 则忽略 script 和 link 标签的创建 excludeChecker?: (url: string) => boolean // 可选,如果函数返回 `true` ,则 micro-app 不会处理它,元素将原封不动进行渲染 ignoreChecker?: (url: string) => boolean // 可选,传递给loader的配置项 options?: any, // 可选,js处理函数,必须返回 code 值 loader?: (code: string, url: string, options: any, info: sourceScriptInfo) => string, // 可选,html 处理函数,必须返回 code 值 processHtml?: (code: string, url: string, options: unknown) => string }> // 子应用插件 modules?: { // appName为应用的名称,这些插件只会作用于指定的应用 [name: string]: Array<{ // 可选,强隔离的全局变量(默认情况下子应用无法找到的全局变量会兜底到主应用中,scopeProperties可以禁止这种情况) scopeProperties?: string[], // 可选,可以逃逸到外部的全局变量(escapeProperties中的变量会同时赋值到子应用和外部真实的window上) escapeProperties?: string[], // 可选,如果函数返回 `true` 则忽略 script 和 link 标签的创建 excludeChecker?: (url: string) => boolean // 可选,如果函数返回 `true` ,则 micro-app 不会处理它,元素将原封不动进行渲染 ignoreChecker?: (url: string) => boolean // 可选,传递给loader的配置项 options?: any, // 必填,js处理函数,必须返回code值 loader?: (code: string, url: string, options: any, info: sourceScriptInfo) => string, // 可选,html 处理函数,必须返回 code 值 processHtml?: (code: string, url: string, options: unknown) => string }> } }, // 重定义fetch方法,可以用于拦截资源请求操作 fetch?: (url: string, options: Record, appName: string | null) => Promise // 设置全局静态资源 globalAssets?: { js?: string[], // js地址 css?: string[], // css地址 }, // 指定部分特殊的动态加载的微应用资源(css/js) 不被 micro-app 劫持处理 excludeAssetFilter?: (assetUrl: string) => boolean // 基座对子应用 document 的一些属性进行自定义代理扩展 customProxyDocumentProps?: Map void>\n})\n使用方式:\n// index.js\nimport microApp from '@micro-zoe/micro-app' microApp.start()"},{header:"preFetch",slug:"prefetch",content:`描述: 预加载,在浏览器空闲时间,依照开发者传入的顺序,依次加载每个应用的静态资源
+介绍:
+preFetch([ { name: string, url: string, disableScopecss?: boolean, disableSandbox?: boolean, },
+])
+使用方式:
+import { preFetch } from '@micro-zoe/micro-app' // 方式一
+preFetch([ { name: 'my-app1', url: 'xxx' }, { name: 'my-app2', url: 'xxx' },
+]) // 方式二
+preFetch(() => [ { name: 'my-app1', url: 'xxx' }, { name: 'my-app2', url: 'xxx' },
+])`},{header:"getActiveApps",slug:"getactiveapps",content:`描述: 获取正在运行的子应用,不包含已卸载和预加载的应用
+版本限制: 0.5.2及以上版本
+介绍:
+/** * getActiveApps接受一个对象作为参数,详情如下: * @param excludeHiddenApp 是否过滤处于隐藏状态的keep-alive应用,默认false * @param excludePreRender 是否过滤预渲染的应用,默认false */
+function getActiveApps({ excludeHiddenApp?: boolean, excludePreRender?: boolean,
+}): string[]
+使用方式:
+import { getActiveApps } from '@micro-zoe/micro-app' // 获取所有正在运行的应用的名称
+getActiveApps() // [子应用1name, 子应用2name, ...] // 获取所有正在运行的应用的名称,但不包括已经处于隐藏状态的keep-alive应用
+getActiveApps({ excludeHiddenApp: true }) // 获取所有正在运行的应用的名称,但不包括预渲染应用
+getActiveApps({ excludePreRender: true })`},{header:"getAllApps",slug:"getallapps",content:`描述: 获取所有子应用,包含已卸载和预加载的应用
+版本限制: 0.5.2及以上版本
+介绍:
+function getAllApps(): string[]
+使用方式:
+import { getAllApps } from '@micro-zoe/micro-app' getAllApps() // [子应用name, 子应用name, ...]`},{header:"version",slug:"version",content:`描述: 查看版本号
+方式1:
+import { version } from '@micro-zoe/micro-app'
+方式2: 通过micro-app元素上的version属性查看
+document.querySelector('micro-app').version`},{header:"pureCreateElement",slug:"purecreateelement",content:`描述: 创建无绑定的纯净元素
+使用方式:
+import { pureCreateElement } from '@micro-zoe/micro-app' const pureDiv = pureCreateElement('div') document.body.appendChild(pureDiv)`},{header:"removeDomScope",slug:"removedomscope",content:`描述: 解除元素绑定,通常用于受子应用元素绑定影响,导致主应用元素错误绑定到子应用的情况
+使用方式:
+import { removeDomScope } from '@micro-zoe/micro-app' // 重置作用域
+removeDomScope()`},{header:"unmountApp",slug:"unmountapp",content:`描述: 手动卸载应用
+版本限制: 0.6.1及以上版本
+介绍:
+// unmountApp 参数配置
+interface unmountAppParams { /** * destroy: 是否强制卸载应用并删除缓存资源,默认值:false * 优先级: 高于 clearAliveState * 对于已经卸载的应用: 当子应用已经卸载或keep-alive应用已经推入后台,则清除应用状态及缓存资源 * 对于正在运行的应用: 当子应用正在运行,则卸载应用并删除状态及缓存资源 */ destroy?: boolean /** * clearAliveState: 是否清空应用的缓存状态,默认值:false * 解释: 如果子应用是keep-alive,则卸载并清空状态,并保留缓存资源,如果子应用不是keep-alive,则执行正常卸载流程,并保留缓存资源 * 补充: 无论keep-alive应用正在运行还是已经推入后台,都将执行卸载操作,清空应用缓存状态,并保留缓存资源 */ clearAliveState?: boolean
+} function unmountApp(appName: string, options?: unmountAppParams): Promise
+使用方式:
+// 正常流程
+unmountApp(子应用名称).then(() => console.log('卸载成功')) // 卸载应用并清空缓存资源
+unmountApp(子应用名称, { destroy: true }).then(() => console.log('卸载成功')) // 如果子应用是keep-alive应用,则卸载并清空状态,如果子应用不是keep-alive应用,则正常卸载
+unmountApp(子应用名称, { clearAliveState: true }).then(() => console.log('卸载成功')) // 如果destroy和clearAliveState同时为true,则clearAliveState将失效
+unmountApp(子应用名称, { destroy: true, clearAliveState: true }).then(() => console.log('卸载成功'))`},{header:"unmountAllApps",slug:"unmountallapps",content:`描述: 手动卸载所有应用
+版本限制: 0.6.1及以上版本
+介绍:
+// unmountAllApps 参数配置
+interface unmountAppParams { /** * destroy: 是否强制卸载应用并删除缓存资源,默认值:false * 优先级: 高于 clearAliveState * 对于已经卸载的应用: 当子应用已经卸载或keep-alive应用已经推入后台,则清除应用状态及缓存资源 * 对于正在运行的应用: 当子应用正在运行,则卸载应用并删除状态及缓存资源 */ destroy?: boolean /** * clearAliveState: 是否清空应用的缓存状态,默认值:false * 解释: 如果子应用是keep-alive,则卸载并清空状态,并保留缓存资源,如果子应用不是keep-alive,则执行正常卸载流程,并保留缓存资源 * 补充: 无论keep-alive应用正在运行还是已经推入后台,都将执行卸载操作,清空应用缓存状态,并保留缓存资源 */ clearAliveState?: boolean
+} function unmountAllApps(options?: unmountAppParams): Promise
+使用方式:
+// 正常流程
+unmountAllApps().then(() => console.log('卸载成功')) // 卸载所有应用并清空缓存资源
+unmountAllApps({ destroy: true }).then(() => console.log('卸载成功')) // 如果子应用是keep-alive应用,则卸载并清空状态,如果子应用不是keep-alive应用,则正常卸载
+unmountAllApps({ clearAliveState: true }).then(() => console.log('卸载成功')) // 如果destroy和clearAliveState同时为true,则clearAliveState将失效
+unmountAllApps({ destroy: true, clearAliveState: true }).then(() => console.log('卸载成功'))`},{header:"reload",slug:"reload",content:`描述: 重新渲染子应用
+版本限制: 1.0.0及以上版本
+介绍:
+/** * @param appName 应用名称,必传 * @param destroy 重新渲染时是否彻底删除缓存值,可选 */
+function reload(appName: string, destroy?: boolean): Promise
+使用方式:
+import microApp from '@micro-zoe/micro-app' // 案例一:重新渲染子应用my-app
+microApp.reload('my-app').then((result) => { if (result) { console.log('重新渲染成功') } else { console.log('重新渲染失败') }
+}) // 案例二:重新渲染子应用my-app,并彻底删除缓存值
+microApp.reload('my-app', true).then((result) => { if (result) { console.log('重新渲染成功') } else { console.log('重新渲染失败') }
+})`},{header:"renderApp",slug:"renderapp",content:`描述: 手动渲染子应用
+介绍:
+interface RenderAppOptions { name: string, // 应用名称,必传 url: string, // 应用地址,必传 container: string | Element, // 应用容器或选择器,必传 iframe?: boolean, // 是否切换为iframe沙箱,可选 inline?: boolean, // 开启内联模式运行js,可选 'disable-scopecss'?: boolean, // 关闭样式隔离,可选 'disable-sandbox'?: boolean, // 关闭沙箱,可选 'disable-memory-router'?: boolean, // 关闭虚拟路由系统,可选 'default-page'?: string, // 指定默认渲染的页面,可选 'keep-router-state'?: boolean, // 保留路由状态,可选 'disable-patch-request'?: boolean, // 关闭子应用请求的自动补全功能,可选 'keep-alive'?: boolean, // 开启keep-alive模式,可选 destroy?: boolean, // 卸载时强制删除缓存资源,可选 fiber?: boolean, // 开启fiber模式,可选 baseroute?: string, // 设置子应用的基础路由,可选 ssr?: boolean, // 开启ssr模式,可选 shadowDOM?: boolean, // 开启shadowDOM,可选 data?: Object, // 传递给子应用的数据,可选 onDataChange?: Function, // 获取子应用发送数据的监听函数,可选 // 注册子应用的生命周期 lifeCycles?: { created(e: CustomEvent): void, // 加载资源前触发 beforemount(e: CustomEvent): void, // 加载资源完成后,开始渲染之前触发 mounted(e: CustomEvent): void, // 子应用渲染结束后触发 unmount(e: CustomEvent): void, // 子应用卸载时触发 error(e: CustomEvent): void, // 子应用渲染出错时触发 beforeshow(e: CustomEvent): void, // 子应用推入前台之前触发(keep-alive模式特有) aftershow(e: CustomEvent): void, // 子应用推入前台之后触发(keep-alive模式特有) afterhidden(e: CustomEvent): void, // 子应用推入后台时触发(keep-alive模式特有) },
+} /** * @param options RenderAppOptions 配置项 */
+function renderApp(options: RenderAppOptions): Promise
+使用方式:
+import microApp from '@micro-zoe/micro-app' // 案例一
+microApp.renderApp({ name: 'my-app', url: 'http://localhost:3000', container: '#container',
+}).then((result) => { if (result) { console.log('渲染成功') } else { console.log('渲染失败') }
+}) // 案例二
+microApp.renderApp({ name: 'my-app', url: 'http://localhost:3000', container: '#container', inline: true, data: { key: '初始化数据' }, lifeCycles: { mounted () { console.log('子应用已经渲染') }, unmount () { console.log('子应用已经卸载') }, }
+})`},{header:"document.microAppElement",slug:"document-microappelement",content:`描述: 获取子应用所在的micro-app元素。
+限制: 只能在子应用内部使用,基座中可以使用document.querySelector获取micro-app元素
+使用方式:
+document.microAppElement.appendChild(...)`},{header:"setData",slug:"setdata",content:`描述: 向指定的子应用发送数据
+介绍:
+setData(appName: String, data: Object)
+使用方式:
+import microApp from '@micro-zoe/micro-app' // 发送数据给子应用 my-app,setData第二个参数只接受对象类型
+microApp.setData('my-app', {type: '新的数据'})`},{header:"getData",slug:"getdata",content:`描述: 获取指定的子应用data数据
+介绍:
+getData(appName: String): Object
+使用方式:
+import microApp from '@micro-zoe/micro-app' const childData = microApp.getData('my-app') // 返回my-app子应用的data数据`},{header:"addDataListener",slug:"adddatalistener",content:`描述: 监听指定子应用的数据变化
+介绍:
+/** * 绑定监听函数 * appName: 应用名称 * dataListener: 绑定函数 * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false */
+microApp.addDataListener(appName: string, dataListener: Function, autoTrigger?: boolean)
+使用方式:
+import microApp from '@micro-zoe/micro-app' function dataListener (data) { console.log('来自子应用my-app的数据', data)
+} microApp.addDataListener('my-app', dataListener)`},{header:"removeDataListener",slug:"removedatalistener",content:`描述: 解除主应用的数据监听函数
+使用方式:
+import microApp from '@micro-zoe/micro-app' function dataListener (data) { console.log('来自子应用my-app的数据', data)
+} // 解绑监听my-app子应用的数据监听函数
+microApp.removeDataListener('my-app', dataListener)`},{header:"clearDataListener",slug:"cleardatalistener",content:`描述: 清空主应用的所有数据监听函数
+使用方式:
+import microApp from '@micro-zoe/micro-app' // 清空所有监听appName子应用的数据监听函数
+microApp.clearDataListener('my-app')`},{header:"getGlobalData",slug:"getglobaldata",content:`描述: 获取全局数据
+使用方式:
+import microApp from '@micro-zoe/micro-app' // 直接获取数据
+const globalData = microApp.getGlobalData() // 返回全局数据`},{header:"addGlobalDataListener",slug:"addglobaldatalistener",content:`描述: 绑定数据监听函数
+介绍:
+/** * 绑定监听函数 * dataListener: 绑定函数 * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false */
+microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean)
+使用方式:
+import microApp from '@micro-zoe/micro-app' function dataListener (data) { console.log('全局数据', data)
+} microApp.addGlobalDataListener(dataListener)`},{header:"removeGlobalDataListener",slug:"removeglobaldatalistener",content:`描述: 解绑全局数据监听函数
+使用方式:
+import microApp from '@micro-zoe/micro-app' function dataListener (data) { console.log('全局数据', data)
+} microApp.removeGlobalDataListener(dataListener)`},{header:"clearGlobalDataListener",slug:"clearglobaldatalistener",content:`描述: 清空主应用绑定的所有全局数据监听函数
+使用方式:
+import microApp from '@micro-zoe/micro-app' microApp.clearGlobalDataListener()`},{header:"setGlobalData",slug:"setglobaldata",content:`描述: 发送全局数据
+使用方式:
+import microApp from '@micro-zoe/micro-app' // setGlobalData只接受对象作为参数
+microApp.setGlobalData({type: '全局数据'})`},{header:"pureCreateElement",slug:"purecreateelement-1",content:`描述: 创建无绑定的纯净元素,该元素可以逃离元素隔离的边界,不受子应用沙箱的控制
+版本限制: 0.8.2及以上版本
+使用方式:
+const pureDiv = window.microApp.pureCreateElement('div') document.body.appendChild(pureDiv)`},{header:"removeDomScope",slug:"removedomscope-1",content:`描述: 解除元素绑定,通常用于受子应用元素绑定影响,导致主应用元素错误绑定到子应用的情况
+版本限制: 0.8.2及以上版本
+使用方式:
+// 重置作用域
+window.microApp.removeDomScope()`},{header:"rawWindow",slug:"rawwindow",content:`描述: 获取真实的window
+使用方式:
+window.rawWindow`},{header:"rawDocument",slug:"rawdocument",content:`描述: 获取真实的document
+使用方式:
+window.rawDocument`},{header:"getData",slug:"getdata-1",content:`描述: 获取主应用下发的data数据
+使用方式:
+const data = window.microApp.getData() // 返回主应用下发的data数据`},{header:"addDataListener",slug:"adddatalistener-1",content:`描述: 绑定数据监听函数
+介绍:
+/** * 绑定监听函数,监听函数只有在数据变化时才会触发 * dataListener: 绑定函数 * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false * !!!重要说明: 因为子应用是异步渲染的,而主应用发送数据是同步的, * 如果在子应用渲染结束前主应用发送数据,则在绑定监听函数前数据已经发送,在初始化后不会触发绑定函数, * 但这个数据会放入缓存中,此时可以设置autoTrigger为true主动触发一次监听函数来获取数据。 */
+window.microApp.addDataListener(dataListener: Function, autoTrigger?: boolean)
+使用方式:
+function dataListener (data) { console.log('来自主应用的数据', data)
+} window.microApp.addDataListener(dataListener)`},{header:"removeDataListener",slug:"removedatalistener-1",content:`描述: 解绑数据监听函数
+使用方式:
+function dataListener (data) { console.log('来自主应用的数据', data)
+} window.microApp.removeDataListener(dataListener)`},{header:"clearDataListener",slug:"cleardatalistener-1",content:`描述: 清空当前子应用的所有数据监听函数(全局数据函数除外)
+使用方式:
+window.microApp.clearDataListener()`},{header:"dispatch",slug:"dispatch",content:`描述: 向主应用发送数据
+使用方式:
+// dispatch只接受对象作为参数
+window.microApp.dispatch({type: '子应用发送的数据'})`},{header:"getGlobalData",slug:"getglobaldata-1",content:`描述: 获取全局数据
+使用方式:
+const globalData = window.microApp.getGlobalData() // 返回全局数据`},{header:"addGlobalDataListener",slug:"addglobaldatalistener-1",content:`描述: 绑定数据监听函数
+介绍:
+/** * 绑定监听函数 * dataListener: 绑定函数 * autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false */
+window.microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean) 使用方式:
+function dataListener (data) { console.log('全局数据', data)
+} window.microApp.addGlobalDataListener(dataListener)`},{header:"removeGlobalDataListener",slug:"removeglobaldatalistener-1",content:`描述: 解绑全局数据监听函数
+使用方式:
+function dataListener (data) { console.log('全局数据', data)
+} window.microApp.removeGlobalDataListener(dataListener)`},{header:"clearGlobalDataListener",slug:"clearglobaldatalistener-1",content:`描述: 清空当前子应用绑定的所有全局数据监听函数
+使用方式:
+window.microApp.clearGlobalDataListener()`},{header:"setGlobalData",slug:"setglobaldata-1",content:`描述: 发送全局数据
+使用方式:
+// setGlobalData只接受对象作为参数
+window.microApp.setGlobalData({type: '全局数据'})`}]},{path:"/zh/browser-router.html",title:"",pathLocale:"/",contents:[{header:"",slug:"",content:"关闭虚拟路由后,没有了路由隔离后的处理方式会复杂很多,子应用将基于浏览器地址进行渲染,此时需要设置子应用的基础路由。"},{header:"路由类型约束",slug:"路由类型约束",content:`1、主应用是hash路由,子应用也必须是hash路由
+2、主应用是history路由,子应用可以是hash或history路由`},{header:"基础路由",slug:"基础路由",content:`作用:
+通常主应用和子应用各有一套路由系统,为了防止冲突,主应用需要分配一个路由给子应用,称之为基础路由,子应用可以在这个路由下渲染,但不能超出这个路由的范围,这就是基础路由的作用。
+使用方式
+主应用中通过设置 的baseroute属性下发,子应用通过window.__MICRO_APP_BASE_ROUTE__获取此值并设置基础路由。
+注意点: 1、如果主应用是history路由,子应用是hash路由,不需要设置基础路由baseroute
+2、如果子应用只有一个页面,没有使用react-router,vue-router之类,也不需要设置基础路由baseroute
+3、vue-router在hash模式下无法通过base设置基础路由,需要创建一个空的路由页面,将其它路由作为它的children,具体设置如下: import RootApp from './root-app.vue' const routes = [ { path: window.__MICRO_APP_BASE_ROUTE__ || '/', component: RootApp, children: [ // 其他的路由都写到这里 ], },
+]
+root-app.vue内容如下:
+
+
+示例 // router.js
+import { BrowserRouter, Switch, Route } from 'react-router-dom'
+import ChildPage from './child-page' export default function AppRoute () { return ( // 非严格匹配,/child/* 都指向ChildPage组件 // /child 就是分配给子应用的基础路由baseroute )
+} // child-page.js
+export function ChildPage () { return (
子应用
)
+} import { BrowserRouter, Switch, Route } from 'react-router-dom' export default function AppRoute () { return ( // 👇 设置基础路由,子应用可以通过window.__MICRO_APP_BASE_ROUTE__获取主应用下发的baseroute,如果没有设置baseroute属性,则此值默认为空字符串 ... )
+} // router.js
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+import ChildPage from './child-page.vue' Vue.use(VueRouter) const routes = [ { // /child/* 都指向ChildPage组件 path: '/child/*', // vue-router@4.x path的写法为:'/child/:page*' name: 'child', component: ChildPage, },
+] export default routes // child-page.vue
+
子应用
+ import Vue from 'vue'
+import VueRouter from 'vue-router'
+import routes from './router' const router = new VueRouter({ // 👇 设置基础路由,子应用可以通过window.__MICRO_APP_BASE_ROUTE__获取主应用下发的baseroute,如果没有设置baseroute属性,则此值默认为空字符串 base: window.__MICRO_APP_BASE_ROUTE__ || '/', routes,
+}) let app = new Vue({ router, render: h => h(App),
+}).$mount('#app') 提示
+vue-router@4.x设置base的方式请查看 https://next.router.vuejs.org/`},{header:"应用之间跳转",slug:"应用之间跳转",content:"应用之间跳转"},{header:"url属性和子应用路由的关系",slug:"url属性和子应用路由的关系",content:`答:没有关系!
+micro-app的url属性只是html的地址,它的作用就是加载html资源。`},{header:"子应用不会根据micro-app的url属性渲染对应的页面,而是根据浏览器地址渲染对应的页面。",slug:"子应用不会根据micro-app的url属性渲染对应的页面-而是根据浏览器地址渲染对应的页面。",content:`举个栗子 🌰 :
+浏览器地址为:http://localhost:3000/page1/,此时路由地址为page1。
+主应用会匹配page1并渲染对应的组件,子应用也是一样,浏览器地址会同时影响到主应用和子应用,因为每个应用都有一套自己的路由系统,它们是可以共存的,不会冲突。
+此时我们要渲染子应用http://www.xxx.com/的page1页面,那么micro-app的url属性填写的是http://www.xxx.com/,而不是http://www.xxx.com/page1/。
+
+子应用加载完成后会根据浏览器的地址page1匹配并渲染对应的页面。
+同理,页面参数和hash也是以浏览器为准。
+栗子2 🌰 :
+子应用是hash路由,我们要渲染子应用的page1页面,那么在micro-app的url属性上设置hash值是无效的,#/page1应该添加到浏览器地址上。
+
+
+
+栗子3 🌰 :
+主应用是history路由,子应用是hash路由,我们要跳转主应用的my-app页面,页面中嵌入子应用,我们要展现子应用的page1页面。
+那么浏览器地址应该为:域名/my-page#/page1,我们在主应用中跳转my-app页面的参数为:router.push('/my-page#/page1')
+此时流程为:主应用匹配到/my-page路径并渲染my-app页面,因为my-app页面中嵌入了子应用,此时子应用开始加载并渲染,子应用在渲染时会匹配到#/page1并渲染page1页面。
+micro-app配置如下:
+
+
+栗子4 🌰 :
+主应用是history路由,子应用也是history路由,我们要跳转主应用的my-app页面,my-app页面中嵌入子应用,我们要展现子应用的page1页面。
+那么浏览器地址应该为:域名/my-page/page1,我们在主应用中跳转的参数为:router.push('/my-page/page1')
+此时流程为:主应用匹配到/my-page路径并渲染my-app页面,因为my-app页面中嵌入了子应用,此时子应用开始加载并渲染,子应用在渲染时会匹配到/my-page/page1并渲染page1页面。
+micro-app配置如下:
+这就是在快速开始一章中提到的案例。
+
+
+提示
+如果你看到这里还是无法正确设置路由,那么将主应用设置为history路由,子应用设置为hash路由,可以一劳永逸解决所有问题,此时不需要设置baseroute,也不需要修改主应用和子应用的任何路由设置。`}]},{path:"/zh/changelog.html",title:"",pathLocale:"/",contents:[{header:"",slug:"",content:"micro-app 遵循 Semantic Versioning 2.0.0 语义化版本规范。"},{header:"发布周期",slug:"发布周期",content:`主版本号:含有破坏性更新和新特性,不在发布周期内。
+次版本号:每月发布一个带有新特性的向下兼容的版本。
+修订版本号:每周末会进行日常 bugfix 更新。(如果有紧急的 bugfix,则任何时候都可发布)`},{header:"1.0.0-rc.3",slug:"_1-0-0-rc-3",content:`2023-12-18 New 🆕 新增componentMode组件模式,micro-app支持单独运行js文件944。
+🆕 新增方法getAppState,用于在基座中获取子应用的状态。
+🆕 新增虚拟路由系统push, replace方法对Promise的支持。
+🆕 新增对于CSS循环嵌套的支持956。 Bug Fix 🐞 修复了在非custom路由模式下设置baseroute导致子应用渲染失败的问题。
+🐞 修复了isObject方法中参数为null导致错误的问题998。
+🐞 修复了子应用onerror事件无法触发的问题992。
+🐞 修复了iframe沙箱下子应用Node.ownerDocument指向错误的问题988。
+🐞 修复了with沙箱下判断MicroDocument实例时目标为null导致报错的问题986。
+🐞 修复了iframe沙箱下通过document.head.querySelector(...)查询元素异常的问题984。
+🐞 修复了子应用html自带元素parentNode指向异常的问题。 Update 🆕 更新with沙箱运行逻辑,异步执行初始化操作,确保不同沙箱之间逻辑一致。
+🆕 优化了utils方法中元素判断的方式998。
+🚀 更新了案例。`},{header:"1.0.0-rc.2",slug:"_1-0-0-rc-2",content:`2023-10-30 New 🆕 新增了子应用全局变量__MICRO_APP_STATE__,用于标记当前应用的状态。
+🆕 新增了子应用document变量__MICRO_APP_NAME__,用于标记document所属应用。
+🆕 重写了原型方法Node.prototype.parentNode,用于处理特殊元素parentNode的指向问题。 Bug Fix 🐞 修复了在iframe沙箱下循环嵌套的问题。
+🐞 修复了在iframe沙箱下开启inline模式导致通过getElementsByTagName获取script元素失败的问题。 Update 🆕 优化了内存占用,在iframe沙箱模式下默认开启inline模式。
+🚀 更新了官网文档。`},{header:"1.0.0-rc.1",slug:"_1-0-0-rc-1",content:`2023-10-16 New 🆕 新增了Chrome浏览器插件Micro-App-DevTools,提高开发效率。 Update 🚀 完善单元测试功能。
+🚀 更新了官网文档。`},{header:"1.0.0-rc.0",slug:"_1-0-0-rc-0",content:`2023-09-22 New 🆕 新增了子应用全局变量__MICRO_APP_SANDBOX_TYPE__,用于标记当前应用的沙箱类型。 Bug Fix 🐞 修复了在关闭沙箱后发送生命周期事件异常的问题。
+🐞 修复了在部分场景下,多次执行microApp.start方法导致的死循环问题。
+🐞 修复了afterhidden过早触发导致的container为空的问题。 Update 🚀 完善单元测试功能。
+🚀 更新了官网文档。
+🚀 发布1.0正式版。`},{header:"1.0.0-beta.7",slug:"_1-0-0-beta-7",content:`2023-09-20 New 🆕 新增了子应用内部状态before_mount,用于标记子应用在资源加载后和执行js前的中间状态。 Bug Fix 🐞 修复了在iframe沙箱模式下,子应用使用monaco-editor时代码输入框光标失效的问题。
+🐞 修复了在window.mount为Promise时抛出的错误无法捕获的问题。
+🐞 修复了在iframe沙箱模式下,子应用加载完成之前进行导航导致报错的问题。
+🐞 修复了在with沙箱模式下,异步创建路由系统导致部分场景下location未定义的问题,issue #908。
+🐞 修复了在micro-app子应用开始渲染到渲染完成之前通过路由API无法控制跳转的问题。 Update 🚀 完善单元测试功能。
+🚀 更新了官网文档。`},{header:"1.0.0-beta.6",slug:"_1-0-0-beta-6",content:`2023-09-14 New 🆕 新增了虚拟路由多种模式功能,新增了三种路由模式:search、history、custom。
+🆕 新增了在预渲染时可以选择不同路由模式进行渲染的功能。
+🆕 新增了全局变量document.microAppElement,用于获取子应用所在的micro-app元素。 Bug Fix 🐞 修复了在with沙箱下子应用使用vuedraggable报错的问题。
+🐞 修复了在iframe沙箱下子应用定义onpopstate、onhashchange会覆盖主应用方法的问题。
+🐞 修复了window.addEventListener绑定非window对象时表现异常的问题。
+🐞 修复了document.addEventListener绑定非document对象时表现异常的问题。
+🐞 修复了在子应用初始化后icon link丢失的问题。
+🐞 修复了通过rawDocument、rawWindow操作元素时,元素作用域绑定异常的问题。
+🐞 修复了通过document.querySelector(":root")无法获取根元素的问题。 Update 🚀 删除了配置项disable-memory-router,虚拟路由不再支持关闭功能。
+🚀 优化了with沙箱中特殊事件的处理方式,onpopstate、onhashchange等方法不再绑定到原生window。
+🚀 优化了沙箱的架构设计及代码。
+🚀 完成了部分1.0版本单元测试的功能。
+🚀 更新了官网文档。`},{header:"1.0.0-beta.5",slug:"_1-0-0-beta-5",content:`2023-05-23 Bug Fix 🐞 修复了环境变量__MICRO_APP_BASE_APPLICATION__为undefined的问题。
+🐞 修复了vite+react子应用接入失败的问题。
+🐞 修复了通过修改name和url渲染keep-alive应用失败的问题。 Update 🚀 优化了部分开发案例。`},{header:"1.0.0-beta.4",slug:"_1-0-0-beta-4",content:`2023-04-27 New 🆕 新增了在iframe沙箱下支持关闭虚拟路由系统的功能。 Bug Fix 🐞 修复了在子应用还未渲染时通过虚拟路由控制子应用跳转导致浏览器URL地址修改的问题。
+🐞 修复了在keep-alive应用隐藏后通过虚拟路由控制子应用跳转导致浏览器URL地址修改的问题。 Update 🚀 优化了部分开发案例。`},{header:"1.0.0-beta.3",slug:"_1-0-0-beta-3",content:`2023-04-13 Bug Fix 🐞 修复了在非内联模式下通过insertAdjacentElement插入script导致报错的问题。
+🐞 修复了在关闭沙箱时module script远程资源被重复加载的问题。
+🐞 修复了在加载资源过程中卸载keep-alive应用导致应用二次渲染失败的问题。
+🐞 修复了在umd模式下卸载preRender app、hidden keep-alive app应用导致事件覆盖的问题。`},{header:"1.0.0-beta.2",slug:"_1-0-0-beta-2",content:`2023-04-06 New 🆕 新增了对insertAdjacentElement元素方法的处理。
+🆕 新增了在iframe沙箱下对append、prepend元素方法的处理。 Bug Fix 🐞 修复了异步卸载子应用时Element.prototype.setAttribute方法可能被重置的问题。
+🐞 修复了在多层嵌套时异步卸载子应用导致应用绑定作用域异常的问题。
+🐞 修复了在iframe沙箱下无法设置document.title的问题。
+🐞 修复了在开发环境下vite4样式隔离失效的问题。
+🐞 修复了在with沙箱下循环嵌套子应用无法设置document.onclick的问题。 Update 🚀 优化了with沙箱Document事件系统的架构设计,增加兼容性。
+🚀 优化了iframe沙箱Document、Element原型方法。
+🚀 优化了iframe沙箱路由相关代码。
+🚀 更新了vite4的开发案例。`},{header:"1.0.0-beta.1",slug:"_1-0-0-beta-1",content:`2023-03-23 Bug Fix 🐞 修复了主应用和子应用修改domain导致的iframe跨域问题。
+🐞 修复了关闭沙箱导致onmount方法报错的问题。
+🐞 修复了with沙箱环境下react的抽屉组件无法渲染的问题。
+🐞 修复了with沙箱环境下重写ownerDocument导致的react事件重复触发的问题。 Update 🚀 更新了开发环境的案例。`},{header:"1.0.0-beta.0",slug:"_1-0-0-beta-0",content:`2023-03-17 New 🆕 新增了iframe沙箱功能,兼容vite等开发环境。
+🆕 新增了虚拟路由系统的iframe沙箱模式。
+🆕 新增了video、audio、source、embed等资源标签的自动补全功能。 Bug Fix 🐞 修复了通过unmountApp方法卸载预渲染应用报错的问题。
+🐞 修复了主动卸载keep-alive、预渲染应用时全局事件缓存错误的问题。
+🐞 修复了html静态元素无法标记和处理的问题。
+🐞 修复了根元素下parentNode表现异常的问题。
+🐞 修复了低版本浏览器不支持String.prototype.replaceAll的问题。
+🐞 修复了忽略的脚本内获取 currentScript 出错的问题。
+🐞 修复了数据通信在部分场景下快照备份数据监听函数报错的问题。 Update 🚀 优化了资源管理系统,支持多种沙箱之间动态切换,提升资源复用效率。
+🚀 移除了esmodule配置,iframe沙箱环境下默认开启。
+🚀 优化了预加载、预渲染相关功能,增加用户体验。
+🚀 优化了umd模式下对子应用定时器的处理逻辑。`},{header:"1.0.0-alpha.10",slug:"_1-0-0-alpha-10",content:`2022-10-11 Bug Fix 🐞 修复了innerHTML创建的元素无法被拦截的问题。
+🐞 修复了循环嵌套下,根元素的parentNode被多次重写导致parentNode指向错误的问题。 Update 🚀 优化了相关案例。`},{header:"1.0.0-alpha.9",slug:"_1-0-0-alpha-9",content:`2022-09-09 Bug Fix 🐞 修复了angular框架下,micro-app设置动态url导致应用多次渲染的问题。
+🐞 修复了子应用title、meta元素丢失的问题。
+🐞 修复了部分场景下scopeProperties可以逃逸的问题。
+🐞 修复了关闭虚拟路由系统时keep-alive应用依然可以触发虚拟路由系统的问题。 Update 🚀 增加对document的缓存,优化沙箱性能。
+🚀 更新了title元素的处理逻辑,子应用的title元素兜底到主应用,确保title全局唯一。`},{header:"1.0.0-alpha.8",slug:"_1-0-0-alpha-8",content:`2022-09-02 New 🆕 新增了预渲染的功能,提升首次渲染速度。
+🆕 新增了rollup中__DEV__配置,优化开发体验。
+🆕 更新了getActiveApps方法,增加参数excludePreRender。
+🆕 更新了attachAllToURL方法,增加参数includePreRender。 Bug Fix 🐞 修复了在部分场景下,子应用卸载后删除元素导致removeChild方法被循环调用的问题。
+🐞 修复了UMD模式下,二次渲染时document全局事件无法自动卸载的问题。
+🐞 修复了keep-alive模式下,子应用隐藏后全局事件无法自动卸载导致元素作用域异常绑定的问题。 Update 🚀 优化了数据通讯系统,增加回调函数的返回值。
+🚀 优化了预加载逻辑,减小对主应用性能的影响。`},{header:"1.0.0-alpha.7",slug:"_1-0-0-alpha-7",content:`2022-08-26 New 🆕 新增了reload方法,用于手动重新加载子应用。
+🆕 新增了renderApp方法,用于手动渲染子应用。
+🆕 新增了子应用全局事件onmount、onunmount,用于监听子应用的渲染与卸载。
+🆕 新增了clear-data配置,用于在卸载时清空数据通讯中的缓存数据。 Bug Fix 🐞 修复了ElementUI下拉选框在局部刷新时选择框无法消失的问题。 Update 🚀 优化了destroy的逻辑,卸载时主动清空数据通讯中的缓存数据。
+🚀 优化了数据通信系统,合并新旧值,增加强制更新API和防抖处理。`},{header:"1.0.0-alpha.6",slug:"_1-0-0-alpha-6",content:`2022-08-19 New 🆕 重构了资源管理系统,提升资源复用率。
+🆕 新增了excludeAssetFilter配置,用于指定部分特殊的动态加载的微应用资源(css/js) 不被 micro-app 劫持处理。
+🆕 新增了fiber配置,支持子应用以fiber模式运行,增加主应用的响应速度。 Bug Fix 🐞 修复了sourceMap地址丢失,导致调试困难的问题。
+🐞 修复了document.defaultView可以获取真实window的问题。
+🐞 修复了document.currentScript丢失的问题。
+🐞 修复了动态script标签二次渲染时执行顺序错误的问题。
+🐞 修复了angular13、14及vue-cli5 build后应用沙箱失效的问题。
+🐞 修复了全局路由守卫参数与文档不一致的问题。
+🐞 修复了micro-app在vue keep-alive环境下频繁渲染的问题。 Update 🚀 优化了预加载逻辑,提升预加载子应用的渲染速度。
+🚀 优化了sandbox、create_app相关代码。`},{header:"1.0.0-alpha.5",slug:"_1-0-0-alpha-5",content:"2022-08-01 New 🆕 新增子应用全局钩子函数mount, unmount,简化接入步骤。 Update 🚀 更新了1.0版本文档"},{header:"1.0.0-alpha.4",slug:"_1-0-0-alpha-4",content:`2022-07-28 New 🆕 新增了配置disable-patch-request,用于阻止MicroApp对子应用fetch、XMLHttpRequest等请求方法的重写。 Bug Fix 🐞 修复了设置document.title, history.scrollRestoration时报Illegal invocation错误的问题。
+🐞 修复了在umd模式部分场景下二次渲染时全局变量和全局事件丢失的问题。
+🐞 修复了高德地图二次渲染时地图无法显示的问题。
+🐞 修复了element-plus按需加载时,点击ElSelect组件空白区域无法收起的问题。
+🐞 修复了umd模式下每次渲染时fetch、XMLHttpRequest等API被重写的问题。 Update 🚀 更新了umd模式下全局事件和全局变量的处理逻辑,不再主动卸载全局事件和删除全局变量。
+🚀 更新了1.0版本文档`},{header:"1.0.0-alpha.3",slug:"_1-0-0-alpha-3",content:`2022-07-21 New 🆕 重写了主应用的pushState、replaceState方法,自动将子应用的路由信息同步到浏览器地址。
+🆕 重写了子应用的Document对象,每个子应用拥有单独的Document实例。 Bug Fix 🐞 修复了Document原型方法绑定到ProxyDocument时报错的问题。 Update 🚀 优化了路由相关代码和逻辑。
+🚀 更新了案例,增加适配场景`},{header:"1.0.0-alpha.2",slug:"_1-0-0-alpha-2",content:`2022-07-15 New 🆕 新增了attachToURL、attachAllToURL方法,用于将子应用的路由信息同步到浏览器地址。
+🆕 新增了setBaseRouter、getBaseRouter方法,用于注册和使用主应用路由。
+🆕 新增了ProxyDocument,为子应用创建一个虚拟的document对象。 Bug Fix 🐞 修复了ant-design-vue的弹窗类组件及其它特殊情况下,子应用元素逃逸到原生body上的问题。
+🐞 修复了在未设置public_path时,子应用的资源地址补全失败的问题。
+🐞 修复了子应用在调用fetch等API时,元素绑定没有解除的问题。
+🐞 修复了在@keyframes名称带有特殊字符时样式隔离失败的问题。 Update 🚀 优化了路由相关代码和逻辑。
+🚀 更新了案例。`},{header:"1.0.0-alpha.1",slug:"_1-0-0-alpha-1",content:`2022-07-06 New 🆕 新增了proxyRequest,用于拦截fetch、XMLHttpRequest、EventSource请求并进行处理。 Bug Fix 🐞 修复了通过create-react-app创建的react应用热更新时报错的问题。
+🐞 修复了子应用执行pushState/replaceState时popStateEvent事件异常触发的问题。 Update 🚀 优化了资源加载相关代码和逻辑。`},{header:"1.0.0-alpha.0",slug:"_1-0-0-alpha-0",content:"2022-06-30 New 🆕 新增了独立的路由系统 - MemoryRouter,完善JS沙箱。 Bug Fix 🐞 修复了在循环嵌套时iconfont.js在部分场景下报错的问题。 Update 🚀 优化了预加载相关代码和逻辑,提高并行渲染能力。"},{header:"0.8.10",slug:"_0-8-10",content:"2022-08-19 New 🆕 新增了excludeAssetFilter配置,用于指定部分特殊的动态加载的微应用资源(css/js) 不被 micro-app 劫持处理。"},{header:"0.8.9",slug:"_0-8-9",content:"2022-08-15 Bug Fix 🐞 修复了在umd模式下异常清空全局变量的问题。"},{header:"0.8.8",slug:"_0-8-8",content:"2022-07-15 Bug Fix 🐞 修复systemjs的script标签src没有自动补全的问题"},{header:"0.8.6",slug:"_0-8-6",content:`2022-06-30 New 🆕 在 plugin 中增加 excludeChecker 和 ignoreChecker 用于主应用主动忽略子应用部分 script 和 link。
+🆕 新增了processHtml,用于在插件中处理html。 Update 🚀 优化了资源加载相关代码和逻辑。
+🚀 优化了单元测试相关代码。`},{header:"0.8.5",slug:"_0-8-5",content:"2022-02-14 New 🆕 插件的loader方法中新增包含script信息的info参数。"},{header:"0.8.4",slug:"_0-8-4",content:"2022-01-25 Bug Fix 🐞 修复了在火狐浏览器80及以上版本中,样式隔离执行速度过慢的问题。"},{header:"0.8.3",slug:"_0-8-3",content:"2022-01-20 Bug Fix 🐞 修复了在css中通过background-image引入svg时,样式隔离解析失败的问题。 Update 🚀 优化了样式隔离的逻辑,提高兼容和性能。"},{header:"0.8.2",slug:"_0-8-2",content:`2022-01-14 New 🆕 新增了子应用pureCreateElement方法,用于创建无绑定的纯净元素。
+🆕 新增了子应用removeDomScope方法,用于解除元素绑定。 Bug Fix 🐞 修复了主应用通过远程连接引入Vue,加载vue子应用报错的问题,issue #234。 Update 🚀 优化了预加载相关代码和逻辑,减小对主应用项目的影响。`},{header:"0.8.1",slug:"_0-8-1",content:`2022-01-12 Bug Fix 🐞 修复了element-plus部分组件逃离元素隔离的问题, issue #223。
+🐞 修复了在使用IE6、7 CSSHack时样式解析失败的问题, issue #232。 Update 🚀 优化了插件相关代码和逻辑, PR #224 by LinFeng1997。
+🚀 优化了沙箱相关代码和逻辑。`},{header:"0.8.0",slug:"_0-8-0",content:`2022-01-07 New 🆕 新增了在样式隔离下的动态忽略规则。 Bug Fix 🐞 修复了在使用css变量时导致样式丢失的问题,issue #157、#121。
+🐞 修复了在部分浏览器(如:safari)下,css表现有差异的问题。 Update 🚀 样式隔离重构,提升性能和兼容性。`},{header:"0.7.1",slug:"_0-7-1",content:`2021-12-31 Bug Fix 🐞 修复了link标签在非head时样式丢失的问题
+🐞 修复了错误补全svg地址的问题,PR #207 by icksky。
+🐞 修复了在部分浏览器下报WeakRef is not defined错误的问题。`},{header:"0.7.0",slug:"_0-7-0",content:`2021-12-29 New 🆕 新增Api,对外export MicroApp类。 Update 🚀 沙箱重构,性能优化。
+🚀 优化了execScripts方法,不再使用Promise.all,防止单文件加载错误导致后续文件无法执行的问题。
+🚀 优化了getActiveApps方法,增加对过滤keep-alive应用的支持。`},{header:"0.6.2",slug:"_0-6-2",content:"2021-12-19 Bug Fix 🐞 修复了在SSR环境下,抛出Image is not defined的报错问题。"},{header:"0.6.1",slug:"_0-6-1",content:`2021-12-17 New 🆕 新增了unmountApp, unmountAllApps方法,用于主动卸载应用。
+🆕 新增了对disable-sandbox, disable-scopecss配置的支持。 Bug Fix 🐞 修复了通过new Image()创建的元素逃离沙箱的问题,issue #186,PR #187 by asiainfoliwei。
+🐞 修复了通过cloneNode创建的元素逃离沙箱的问题。 Update 🚀 优化了元素隔离patch原型链方法相关代码。
+🚀 优化了kee-alive和destory相关的处理逻辑。
+🚀 优化了unmount生命周期的触发时机,移动到应用彻底卸载后执行。`},{header:"0.6.0",slug:"_0-6-0",content:"2021-12-10 New 🆕 新增了对keep-alive模式的支持。"},{header:"0.5.3",slug:"_0-5-3",content:`2021-12-02 New 🆕 新增了对ssr模式的全局配置的支持。 Bug Fix 🐞 修复了沙箱中注册的全局变量的映射key在部分场景下没有及时删除的问题。
+🐞 修复了在不支持ESModule的项目中,引入polyfill/jsx-custom-event报错的问题。`},{header:"0.5.2",slug:"_0-5-2",content:"2021-11-25 Bug Fix 🐞 修复了index.d.ts中getActiveApps、getAllApps类型声明错误的问题。"},{header:"0.5.1",slug:"_0-5-1",content:`2021-11-25 New 🆕 新增了getActiveApps方法,用于获取正在运行的子应用。
+🆕 新增了getAllApps方法,用于获取所有已经注册的子应用。 Bug Fix 🐞 修复了link、style元素格式化后顺序不一致导致的样式丢失的问题。`},{header:"0.5.0",slug:"_0-5-0",content:`2021-11-19 Bug Fix 🐞 修复了name带有特殊符号时样式失效的问题,删除name中的特殊符号。
+🐞 修复了umd模式下,应用卸载并重新渲染时url冲突,旧应用没有卸载干净的问题。
+🐞 修复了在关闭样式隔离时,样式延迟生效导致页面布局错乱的问题。
+🐞 修复了多次重复向head中插入同一个style元素,导致样式失效的问题。 Update 🚀 优化了应用二次渲染时的性能及内存。
+🚀 优化了样式隔离逻辑,无论是否关闭样式隔离,始终将link元素提取转换为style元素。`},{header:"0.4.3",slug:"_0-4-3",content:`2021-11-05 New 🆕 新增了EventCenterForMicroApp方法,用于沙箱关闭时实现通信功能(如vite) Bug Fix 🐞 修复了在不支持ShadowRoot的浏览器中的报错问题,issue #134
+🐞 修复了元素查询时带有特殊字符导致报错的问题,issue #140`},{header:"0.4.2",slug:"_0-4-2",content:`2021-10-29 New 🆕 新增了数据通信中getGlobalData方法,用于主动获取全局数据
+🆕 新增了对mount, unmount方法promise类型的支持
+🆕 新增了destroy配置项,用于替换destory,但依然保持对低版本的兼容,issue #132 Bug Fix 🐞 修复了umd模式下,react16及以下版本二次渲染后路由跳转刷新页面的问题
+🐞 修复了SSR子应用二次渲染时url不同导致渲染失败的问题
+🐞 修复了 react-inlinesvg 无法正常渲染的问题,issue #56
+🐞 修复了 safari 浏览器中,创建module脚本错误的问题
+🐞 修复了子应用通过defineProperty重写document.onclick时报错的问题 Update 🚀 优化了MicroAppElement、沙箱等代码
+🚀 优化了umd模式下,子应用初次渲染的速度
+🚀 优化了动态创建的script元素src或textContent为空时的处理逻辑
+🚀 优化了mounted生命周期的执行时机`},{header:"0.4.1",slug:"_0-4-1",content:`2021-10-22 Bug Fix 🐞 修复了umd模式下,应用二次渲染时样式丢失的问题
+🐞 修复了资源地址为空时,补全错误的问题
+🐞 修复了对iframe元素src属性的错误处理
+🐞 修复了mounted生命周期在异步脚本中执行时机错误的问题
+🐞 修复了在非沙箱环境下使用umd模式,开启destory后,卸载时注册的函数没有卸载的问题
+🐞 修复了子应用带有preload时资源加载两次的问题 Update 🚀 优化了在非inline模式下,module类型script元素的执行方式
+🚀 优化了报错日志信息,增加应用名称`},{header:"0.4.0",slug:"_0-4-0",content:`2021-10-15 New 🆕 新增了ignore属性,用于忽略部分部分元素
+🆕 新增了全局变量 __MICRO_APP_BASE_APPLICATION__ 用于标记当前应用为主应用 Bug Fix 🐞 修复了对webpack5 & jsonp 的支持
+🐞 修复了angular下动态设置url属性导致加载失败的问题
+🐞 修复了在vite环境下,内存优化的支持
+🐞 修复了script type 为特殊情况下的兜底处理,如application/json
+🐞 修复了循环嵌套时没有完全卸载应用的问题 Update 🚀 优化了对ssr的支持方式
+🚀 优化了动态module的创建和渲染
+🚀 优化了对data、blob类型数据的处理`},{header:"0.3.3",slug:"_0-3-3",content:`2021-09-13 Bug Fix 🐞 修复了data属性赋值后插入文档时,初始化data值无法通过setAttribute拦截的问题
+🐞 修复了渲染缓存micro-app元素时导致的micro-app-head, micro-app-body重复的问题`},{header:"0.3.2",slug:"_0-3-2",content:`2021-09-10 New 🆕 新增了baseroute配置项,用于替换baseurl
+🆕 新增了__MICRO_APP_BASE_ROUTE__全局变量,用于替换__MICRO_APP_BASE_URL__ Update 🚀 废弃了baseurl和__MICRO_APP_BASE_URL__,但依然兼容旧版`},{header:"0.3.1",slug:"_0-3-1",content:"2021-09-08 Bug Fix 🐞 修复了micro-app元素先使用后定义导致start方法配置失效的问题"},{header:"0.3.0",slug:"_0-3-0",content:`2021-09-07 New 🆕 新增了对umd格式的支持
+🆕 废弃eval方法,使用Function进行替换 Bug Fix 🐞 修复了子应用卸载部分内存无法释放的问题
+🐞 修复了widnow\\document\\timer事件在umd模式下多次渲染的问题
+🐞 修复了async和defer js文件没有缓存的问题
+🐞 修复了子应用同时存在多个head、body元素时,元素操作异常的问题。 Update 🚀 优化了修改name&url属性切换应用的操作,部分场景下被替换的应用可以计入缓存
+🚀 更新了全局数据通信卸载机制,主应用和子应用只能卸载自身的全局监听函数`},{header:"0.2.5",slug:"_0-2-5",content:`2021-08-23 New 🆕 新增了main-vue3-vite主应用案例 Bug Fix 🐞 修复了在vue3中name被删除导致的样式丢失的问题
+🐞 修复了无法适配.node、.php、.net后缀文件的问题
+🐞 修复了子应用卸载后依然可以通过副作用函数绑定name作用域的问题 Update 🚀 优化了cosole日志方法和使用方式
+🚀 优化了vite适配方式`},{header:"0.2.4",slug:"_0-2-4",content:`2021-08-13 New 🆕 新增了start配置项globalAssets,用于设置全局共享资源 Bug Fix 🐞 修复了在子应用中请求html元素被拦截的问题
+🐞 修复低版本nodejs对于rollup.config.js执行错误的问题 Update 🚀 代码优化`},{header:"0.2.3",slug:"_0-2-3",content:`2021-08-10 Bug Fix 🐞 修复了切换至预加载app时报app already exists错误
+🐞 修复了地址补全对于a元素的错误处理 Update 🚀 文档更新
+🚀 代码优化
+🚀 更新单元测试`},{header:"0.2.2",slug:"_0-2-2",content:"2021-07-27 Bug Fix 🐞 修复了JSX.IntrinsicElements属性生命丢失的问题 Update 🚀 代码优化"},{header:"0.2.0",slug:"_0-2-0",content:`2021-07-16 Bug Fix 🐞 修复了styled-componets下样式失效的问题
+🐞 修复了沙箱关闭时,插件系统失效的问题
+🐞 修复了link地址没有协议前缀时补全相对地址失败的问题 Update 🚀 案例及文档更新`},{header:"0.1.0",slug:"_0-1-0",content:"2021-07-09 🎉 v0.1.0正式版发布。"}]},{path:"/zh/chat.html",title:"",pathLocale:"/",contents:[{header:"",slug:"",content:`Gitter群聊
+GitHub讨论组
+BUG反馈`}]},{path:"/zh/configure.html",title:"配置项",pathLocale:"/",contents:[{header:"配置项",slug:"配置项",content:"通过配置项,我们可以决定开启或关闭某些功能。"},{header:"name",slug:"name",content:`Desc: 应用名称
+Type: string
+Default: 必传参数
+使用方式:
+注意事项: 必须以字母开头,且不可以带特殊符号(中划线、下划线除外) 每个name都对应一个应用,当多个应用同时渲染时,name不可以重复。
+当name的值发生变化时,会卸载当前应用并重新渲染。`},{header:"url",slug:"url",content:`Desc: 应用地址
+Type: string
+Default: 必传参数
+使用方式: url必须指向子应用的index.html,如:http://localhost:3000/ 或 http://localhost:3000/index.html
+MicroApp会根据url地址自动补全子应用的静态资源,如js、css、图片等
+当url的值发生变化时,会卸载当前应用并根据新的url值重新渲染。`},{header:"iframe",slug:"iframe",content:`Desc: 开启iframe沙箱
+Default: false
+使用方式: MicroApp有两种沙箱方案:with沙箱和iframe沙箱。
+默认开启with沙箱,如果with沙箱无法正常运行,可以尝试切换到iframe沙箱,比如vite。`},{header:"inline",slug:"inline",content:`Desc: 使用内联script
+Default: false
+使用方式: 默认情况下,子应用的js会被提取并在后台运行,这会导致调试困难。
+开启inline后,被提取的js会作为script标签插入应用中运行,在开发环境中更方便调试。
+Note
+开启inline后会稍微损耗性能,建议在开发环境中使用。`},{header:"destroy",slug:"destroy",content:`Desc: 卸载时强制删除缓存资源
+Default: false
+使用方式: 默认情况下,子应用被卸载后不会删除缓存的静态资源和数据,以便在重新渲染时获得更好的性能。
+开启destroy,子应用在卸载后会清空缓存资源和数据,当重新渲染时将和初次渲染的行为保持一致。`},{header:"clear-data",slug:"clear-data",content:`Desc: 卸载时清空数据通讯中的缓存数据
+Default: false
+使用方式: 默认情况下,子应用被卸载后数据通讯中的缓存数据会被保留,如果你希望清空这些数据,设置clear-data即可。
+子应用卸载时会同时清空主应用发送给当前子应用,和当前子应用发送给主应用的数据。
+destroy也有同样的效果。`},{header:"disable-scopecss",slug:"disable-scopecss",content:`Desc: 关闭样式隔离
+Default: false
+使用方式: 关闭样式隔离可以提升页面渲染速度,在此之前,请确保各应用之间样式不会相互污染。`},{header:"disable-sandbox",slug:"disable-sandbox",content:`Desc: 关闭js沙箱
+Default: false
+使用方式: 关闭沙箱可能会导致一些不可预料的问题,通常情况不建议这样做。
+Note
+关闭沙箱后以下功能将失效: 样式隔离
+元素隔离
+路由隔离
+__MICRO_APP_ENVIRONMENT__、__MICRO_APP_PUBLIC_PATH__等全局变量
+baseroute`},{header:"ssr",slug:"ssr",content:`Desc: 开启ssr模式
+Type: string(boolean)
+Default: false
+使用方式:
+版本要求: 0.5.3及以上版本 当子应用是ssr应用时,需要设置ssr属性,此时micro-app会根据ssr模式加载子应用。`},{header:"keep-alive",slug:"keep-alive",content:`Desc: 开启keep-alive模式
+Type: string(boolean)
+Default: false
+使用方式:
+版本要求: 0.6.0及以上版本 开启keep-alive后,应用卸载时会进入缓存,而不是销毁它们,以便保留应用的状态和提升重复渲染的性能。
+keep-alive的优先级小于destroy,当两者同时存在时,keep-alive将失效。`},{header:"disable-memory-router",slug:"disable-memory-router",content:`Desc: 关闭虚拟路由系统
+Type: string(boolean)
+Default: false
+使用方式: 默认情况下,子应用将运行在虚拟路由系统中,和主应用的路由系统进行隔离,避免相互影响。
+子应用的路由信息会作为query参数同步到浏览器地址上,如下: 设置disable-memory-router可以关闭虚拟路由系统,子应用将基于浏览器的路由系统进行渲染,参考browser-router`},{header:"default-page",slug:"default-page",content:`Desc: 指定默认渲染的页面
+Type: string
+Default: ''
+使用方式: 默认情况下,子应用渲染后会展示首页,设置default-page可以指定子应用渲染的页面。
+注意: 如果关闭了虚拟路由系统,default-page也将失效。`},{header:"keep-router-state",slug:"keep-router-state",content:`Desc: 保留路由状态
+Type: string(boolean)
+Default: false
+使用方式: 默认情况下,子应用卸载后重新渲染,将和首次加载一样渲染子应用的页面。
+设置keep-router-state可以保留子应用路由状态,在卸载后重新渲染时将恢复卸载前的页面(页面中的状态不保留)。
+注意: 如果关闭了虚拟路由系统,keep-router-state也将失效。
+当设置了default-page时keep-router-state将失效,因为它的优先级小于default-page`},{header:"disable-patch-request",slug:"disable-patch-request",content:`Desc: 关闭子应用请求的自动补全功能
+Type: string(boolean)
+Default: false
+使用方式: 默认情况下,MicroApp对子应用的fetch、XMLHttpRequest、EventSource进行重写,当请求相对地址时会使用子应用域名自动补全
+如:fetch('/api/data') 补全为 fetch(子应用域名 + '/api/data')
+如果不需要这样的补全,可以配置disable-patch-request进行关闭,此时相对地址会兜底到主应用域名。
+如:fetch('/api/data') 兜底为 fetch(主应用域名 + '/api/data')`},{header:"baseroute",slug:"baseroute",content:`Desc: 设置子应用的基础路由
+Type: string
+Default: ''
+使用方式: 在微前端环境下,子应用可以从window.__MICRO_APP_BASE_ROUTE__上获取baseroute的值,用于设置基础路由。
+默认情况下,baseroute的功能是被禁止的,若要开启需先关闭memory-router
+`},{header:"fiber",slug:"fiber",content:`Desc: 开启fiber模式
+Type: string(boolean)
+Default: false
+使用方式: 默认情况下,子应用js是同步执行的,这会阻塞主应用的渲染线程,当开启fiber后,micro-app会降低子应用的优先级,通过异步执行子应用的js文件,以减小对主应用的影响,快速响应用户操作。
+Note
+开启fiber后会降低子应用的渲染速度。`},{header:"shadowDOM",slug:"shadowdom",content:`Desc: 开启shadowDOM
+Type: string(boolean)
+Default: false
+使用方式:
+shadowDOM具有更强的样式隔离能力,开启后,标签会成为一个真正的WebComponent。
+但shadowDOM在React框架及一些UI库中的兼容不是很好,经常会出现一些不可预料的问题,除非你很清楚它会带来的问题并有信心解决,否则不建议使用。`},{header:"全局配置",slug:"全局配置",content:`全局配置会影响每一个子应用,请小心使用!
+使用方式
+import microApp from '@micro-zoe/micro-app' microApp.start({ iframe: true, // 默认值false inline: true, // 默认值false destroy: true, // 默认值false shadowDOM: true, // 默认值false ssr: true, // 默认值false 'disable-scopecss': true, // 默认值false 'disable-sandbox': true, // 默认值false 'keep-alive': true, // 默认值false 'disable-memory-router': true, // 默认值false 'keep-router-state': true, // 默认值false 'disable-patch-request': true, // 默认值false
+})
+如果希望在某个应用中不使用全局配置,可以单独配置关闭:
+`},{header:"其它配置",slug:"其它配置",content:""},{header:"global",slug:"global",content:`当多个子应用使用相同的js或css资源,在link、script设置global属性会将文件提取为公共文件,共享给其它应用。
+设置global属性后文件第一次加载会放入公共缓存,其它子应用加载相同的资源时直接从缓存中读取内容,从而提升渲染速度。
+使用方式
+
+
+ MicroApp
+
+
+
+
+
+ MicroApp
一款简约、高效、功能强大的微前端框架
+
+
+