From e586001f1f3f900d36228b14055b610c7963eb05 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Sat, 8 May 2021 11:52:16 +0800 Subject: [PATCH] feat(ssr): vuex --- packages/uni-shared/dist/uni-shared.cjs.js | 2 ++ packages/uni-shared/dist/uni-shared.d.ts | 2 ++ packages/uni-shared/dist/uni-shared.es.js | 3 ++- packages/uni-shared/src/constants.ts | 1 + packages/vite-plugin-uni/lib/ssr/render.js | 5 +++++ .../vite-plugin-uni/src/configResolved/plugins/mainJs.ts | 2 +- 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/uni-shared/dist/uni-shared.cjs.js b/packages/uni-shared/dist/uni-shared.cjs.js index 638094f4e..86477c2d9 100644 --- a/packages/uni-shared/dist/uni-shared.cjs.js +++ b/packages/uni-shared/dist/uni-shared.cjs.js @@ -298,6 +298,7 @@ const RESPONSIVE_MIN_WIDTH = 768; const COMPONENT_NAME_PREFIX = 'VUni'; const PRIMARY_COLOR = '#007aff'; const UNI_SSR = '__uniSSR'; +const UNI_SSR_STORE = 'store'; const UNI_SSR_DATA = 'data'; const UNI_SSR_GLOBAL_DATA = 'globalData'; @@ -321,6 +322,7 @@ exports.TAGS = TAGS; exports.UNI_SSR = UNI_SSR; exports.UNI_SSR_DATA = UNI_SSR_DATA; exports.UNI_SSR_GLOBAL_DATA = UNI_SSR_GLOBAL_DATA; +exports.UNI_SSR_STORE = UNI_SSR_STORE; exports.addFont = addFont; exports.debounce = debounce; exports.decode = decode; diff --git a/packages/uni-shared/dist/uni-shared.d.ts b/packages/uni-shared/dist/uni-shared.d.ts index fccad2ab4..9ce9b81d5 100644 --- a/packages/uni-shared/dist/uni-shared.d.ts +++ b/packages/uni-shared/dist/uni-shared.d.ts @@ -93,6 +93,8 @@ export declare const UNI_SSR_DATA = "data"; export declare const UNI_SSR_GLOBAL_DATA = "globalData"; +export declare const UNI_SSR_STORE = "store"; + export declare function updateElementStyle(element: HTMLElement, styles: Partial): void; export { } diff --git a/packages/uni-shared/dist/uni-shared.es.js b/packages/uni-shared/dist/uni-shared.es.js index 4785dc7cc..2857a2f75 100644 --- a/packages/uni-shared/dist/uni-shared.es.js +++ b/packages/uni-shared/dist/uni-shared.es.js @@ -294,6 +294,7 @@ const RESPONSIVE_MIN_WIDTH = 768; const COMPONENT_NAME_PREFIX = 'VUni'; const PRIMARY_COLOR = '#007aff'; const UNI_SSR = '__uniSSR'; +const UNI_SSR_STORE = 'store'; const UNI_SSR_DATA = 'data'; const UNI_SSR_GLOBAL_DATA = 'globalData'; @@ -303,4 +304,4 @@ function getEnvLocale() { return (lang && lang.replace(/[.:].*/, '')) || 'en'; } -export { BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, NAVBAR_HEIGHT, ON_REACH_BOTTOM_DISTANCE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, addFont, debounce, decode, decodedQuery, getEnvLocale, getLen, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, normalizeDataset, normalizeTarget, once, parseQuery, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; +export { BUILT_IN_TAGS, COMPONENT_NAME_PREFIX, COMPONENT_PREFIX, COMPONENT_SELECTOR_PREFIX, NAVBAR_HEIGHT, ON_REACH_BOTTOM_DISTANCE, PLUS_RE, PRIMARY_COLOR, RESPONSIVE_MIN_WIDTH, TABBAR_HEIGHT, TAGS, UNI_SSR, UNI_SSR_DATA, UNI_SSR_GLOBAL_DATA, UNI_SSR_STORE, addFont, debounce, decode, decodedQuery, getEnvLocale, getLen, invokeArrayFns, isBuiltInComponent, isCustomElement, isNativeTag, normalizeDataset, normalizeTarget, once, parseQuery, passive, plusReady, removeLeadingSlash, sanitise, scrollTo, stringifyQuery, updateElementStyle }; diff --git a/packages/uni-shared/src/constants.ts b/packages/uni-shared/src/constants.ts index 5dccd5768..46abb9830 100644 --- a/packages/uni-shared/src/constants.ts +++ b/packages/uni-shared/src/constants.ts @@ -8,5 +8,6 @@ export const COMPONENT_NAME_PREFIX = 'VUni' export const PRIMARY_COLOR = '#007aff' export const UNI_SSR = '__uniSSR' +export const UNI_SSR_STORE = 'store' export const UNI_SSR_DATA = 'data' export const UNI_SSR_GLOBAL_DATA = 'globalData' diff --git a/packages/vite-plugin-uni/lib/ssr/render.js b/packages/vite-plugin-uni/lib/ssr/render.js index ce5d96104..f52f35b31 100644 --- a/packages/vite-plugin-uni/lib/ssr/render.js +++ b/packages/vite-plugin-uni/lib/ssr/render.js @@ -3,6 +3,7 @@ import { renderToString } from '@vue/server-renderer' import { UNI_SSR, UNI_SSR_DATA, + UNI_SSR_STORE, UNI_SSR_GLOBAL_DATA, } from '@dcloudio/uni-shared' @@ -11,6 +12,7 @@ import { getSsrGlobalData } from '@dcloudio/uni-app' export async function render(url, manifest = {}) { const app = createVueSSRAppInstance() const router = app.router + const store = app.config.globalProperties.$store // set the router to the desired URL before rendering await router.push(url) @@ -33,6 +35,9 @@ export async function render(url, manifest = {}) { __uniSSR[UNI_SSR_DATA] = {} } __uniSSR[UNI_SSR_GLOBAL_DATA] = getSsrGlobalData() + if (store) { + __uniSSR[UNI_SSR_STORE] = store.state + } const appContext = renderAppContext(ctx) return [html, preloadLinks, appContext] } diff --git a/packages/vite-plugin-uni/src/configResolved/plugins/mainJs.ts b/packages/vite-plugin-uni/src/configResolved/plugins/mainJs.ts index 7977caf91..b4c250595 100644 --- a/packages/vite-plugin-uni/src/configResolved/plugins/mainJs.ts +++ b/packages/vite-plugin-uni/src/configResolved/plugins/mainJs.ts @@ -39,7 +39,7 @@ function createApp(code: string) { } function createSSRClientApp(code: string) { - return `function createApp(rootComponent, rootProps) {const app = createSSRApp(rootComponent, rootProps).use(plugin);const oldMount = app.mount;app.mount = (selector) => app.router.isReady().then(() => oldMount.call(app, selector));return app;};${code.replace( + return `import { UNI_SSR, UNI_SSR_STORE } from '@dcloudio/uni-shared';function createApp(rootComponent, rootProps) {const app = createSSRApp(rootComponent, rootProps).use(plugin);const oldMount = app.mount;app.mount = (selector) => {window[UNI_SSR] && window[UNI_SSR][UNI_SSR_STORE] && app.config.globalProperties.$store.replaceState(window[UNI_SSR][UNI_SSR_STORE]);app.router.isReady().then(() => oldMount.call(app, selector));};return app;};${code.replace( 'createApp', 'createSSRApp' )}` -- GitLab