From 9601bc8872cbb6041beb172e3e97f5e59e985855 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 23 Feb 2022 17:13:32 +0800 Subject: [PATCH] fix(app): preloadPage --- packages/uni-app-plus/dist/uni.runtime.esm.js | 26 ++++++++++++------- .../src/service/framework/page/preLoad.ts | 5 ++-- .../src/service/framework/page/register.ts | 20 ++++++++------ .../service/framework/page/routeOptions.ts | 1 + packages/uni-app-vite/src/plugin/uni/index.ts | 10 ++++--- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/packages/uni-app-plus/dist/uni.runtime.esm.js b/packages/uni-app-plus/dist/uni.runtime.esm.js index fca37ce74..870b7020b 100644 --- a/packages/uni-app-plus/dist/uni.runtime.esm.js +++ b/packages/uni-app-plus/dist/uni.runtime.esm.js @@ -18154,7 +18154,8 @@ function initRouteOptions(path, openType) { // 需要序列化一遍 const routeOptions = JSON.parse(JSON.stringify(getRouteOptions(path))); routeOptions.meta = initRouteMeta(routeOptions.meta); - if (!__uniConfig.realEntryPagePath && + if (openType !== 'preloadPage' && + !__uniConfig.realEntryPagePath && (openType === 'reLaunch' || getCurrentPages().length === 0) // redirectTo ) { routeOptions.meta.isQuit = true; @@ -18202,7 +18203,7 @@ function closePreloadWebview({ url }) { } function preloadWebview({ url, path, query, }) { if (!preloadWebviews[url]) { - const routeOptions = JSON.parse(JSON.stringify(__uniRoutes.find((route) => route.path === path))); + const routeOptions = initRouteOptions(path, 'preloadPage'); preloadWebviews[url] = createWebview({ path, routeOptions, @@ -18329,22 +18330,27 @@ function createNVuePage(pageId, webview, pageInstance) { return pageInstance.eventChannel; }, __setup(vm, curFakeNVueVm) { + vm.$getAppWebview = () => webview; + vm.getOpenerEventChannel = curFakeNVueVm.getOpenerEventChannel; + // 替换真实的 nvue 的 vm + initPageVm(vm, pageInstance); + if (webview.__preload__) { + webview.__page__ = vm; + } const pages = getAllPages(); const index = pages.findIndex((p) => p === curFakeNVueVm); if (index > -1) { - vm.$getAppWebview = () => webview; - vm.getOpenerEventChannel = curFakeNVueVm.getOpenerEventChannel; - // 替换真实的 nvue 的 vm - initPageVm(vm, pageInstance); pages.splice(index, 1, vm); - if (webview.__preload__) { - webview.__page__ = vm; - } } }, }; initPageVm(fakeNVueVm, pageInstance); - addCurrentPage(fakeNVueVm); + if (webview.__preload__) { + webview.__page__ = fakeNVueVm; + } + else { + addCurrentPage(fakeNVueVm); + } } const $navigateTo = (args, { resolve, reject }) => { diff --git a/packages/uni-app-plus/src/service/framework/page/preLoad.ts b/packages/uni-app-plus/src/service/framework/page/preLoad.ts index b668022cc..9a21f82d3 100644 --- a/packages/uni-app-plus/src/service/framework/page/preLoad.ts +++ b/packages/uni-app-plus/src/service/framework/page/preLoad.ts @@ -1,5 +1,6 @@ import { ComponentPublicInstance } from 'vue' import { createWebview } from '../webview' +import { initRouteOptions } from './routeOptions' export interface PreloadWebviewObject extends PlusWebviewWebviewObject { __preload__?: boolean @@ -51,9 +52,7 @@ export function preloadWebview({ query: Record }) { if (!preloadWebviews[url]) { - const routeOptions: UniApp.UniRoute = JSON.parse( - JSON.stringify(__uniRoutes.find((route) => route.path === path)) - ) + const routeOptions: UniApp.UniRoute = initRouteOptions(path, 'preloadPage') preloadWebviews[url] = createWebview({ path, routeOptions, diff --git a/packages/uni-app-plus/src/service/framework/page/register.ts b/packages/uni-app-plus/src/service/framework/page/register.ts index 355d8e5f2..95ad42780 100644 --- a/packages/uni-app-plus/src/service/framework/page/register.ts +++ b/packages/uni-app-plus/src/service/framework/page/register.ts @@ -188,20 +188,24 @@ function createNVuePage( return pageInstance.eventChannel as EventChannel }, __setup(vm: ComponentPublicInstance, curFakeNVueVm: unknown) { + vm.$getAppWebview = () => webview + vm.getOpenerEventChannel = (curFakeNVueVm as any).getOpenerEventChannel + // 替换真实的 nvue 的 vm + initPageVm(vm, pageInstance) + if ((webview as PreloadWebviewObject).__preload__) { + ;(webview as PreloadWebviewObject).__page__ = vm + } const pages = getAllPages() const index = pages.findIndex((p) => p === curFakeNVueVm) if (index > -1) { - vm.$getAppWebview = () => webview - vm.getOpenerEventChannel = (curFakeNVueVm as any).getOpenerEventChannel - // 替换真实的 nvue 的 vm - initPageVm(vm, pageInstance) pages.splice(index, 1, vm) - if ((webview as PreloadWebviewObject).__preload__) { - ;(webview as PreloadWebviewObject).__page__ = vm - } } }, } as unknown as ComponentPublicInstance initPageVm(fakeNVueVm, pageInstance) - addCurrentPage(fakeNVueVm) + if ((webview as PreloadWebviewObject).__preload__) { + ;(webview as PreloadWebviewObject).__page__ = fakeNVueVm + } else { + addCurrentPage(fakeNVueVm) + } } diff --git a/packages/uni-app-plus/src/service/framework/page/routeOptions.ts b/packages/uni-app-plus/src/service/framework/page/routeOptions.ts index b00e34610..a5f066a89 100644 --- a/packages/uni-app-plus/src/service/framework/page/routeOptions.ts +++ b/packages/uni-app-plus/src/service/framework/page/routeOptions.ts @@ -9,6 +9,7 @@ export function initRouteOptions(path: string, openType: UniApp.OpenType) { routeOptions.meta = initRouteMeta(routeOptions.meta) if ( + openType !== 'preloadPage' && !__uniConfig.realEntryPagePath && (openType === 'reLaunch' || getCurrentPages().length === 0) // redirectTo ) { diff --git a/packages/uni-app-vite/src/plugin/uni/index.ts b/packages/uni-app-vite/src/plugin/uni/index.ts index 0532d3bcf..e27e426a0 100644 --- a/packages/uni-app-vite/src/plugin/uni/index.ts +++ b/packages/uni-app-vite/src/plugin/uni/index.ts @@ -1,4 +1,4 @@ -import fs from 'fs' +import fs from 'fs-extra' import path from 'path' import { isAppNativeTag, isAppNVueNativeTag } from '@dcloudio/uni-shared' import { compileI18nJsonStr } from '@dcloudio/uni-i18n' @@ -36,9 +36,11 @@ export function uniOptions(): UniVitePlugin['uni'] { }, }) const debugFilename = '__nvue_debug__' - const debugFilepath = path.resolve(inputDir, debugFilename) - if (fs.existsSync(debugFilepath)) { - fs.copyFileSync(debugFilepath, path.resolve(outputDir, debugFilename)) + if (fs.existsSync(path.resolve(inputDir, debugFilename))) { + targets.push({ + src: debugFilename, + dest: outputDir, + }) } } return { -- GitLab