From 700cfdf06eb44e0a62be05b5a4aa24265570d33c Mon Sep 17 00:00:00 2001 From: birdguo Date: Wed, 11 Sep 2024 15:22:08 +0800 Subject: [PATCH] fix(vue-next): fix vuejs ugrade issue (#4004) * fix(vue-next): fix vuejs ugrade issue 1. fix vuejs 3.4.32 patchProps API change issue 2. compatible vuejs compiler-core API change issue 3. upgrade vue-next demo package version * fix(vue-next): fix vue-next-ssr-demo issue 1. compatible vue upgrade issue 2. fix vue-next-ssr demo issue --- .../examples/hippy-vue-next-demo/package.json | 8 ++-- .../hippy-vue-next-ssr-demo/README.md | 2 +- .../hippy-vue-next-ssr-demo/package.json | 15 +++---- .../scripts/webpack-ssr-config/client.dev.js | 20 +++++++++ .../webpack-ssr-config/client.entry.js | 31 ++++++++++++-- .../scripts/webpack-ssr-config/server.dev.js | 27 ++++++++++-- .../webpack-ssr-config/server.entry.js | 24 ++++++++++- .../hippy-vue-next-ssr-demo/src/app.vue | 19 ++++++++- .../hippy-vue-next-ssr-demo/src/main.ts | 2 +- .../hippy-vue-next-compiler-ssr/package.json | 12 +++--- .../src/transforms/ssrInjectCssVars.ts | 3 +- .../transforms/ssrInjectFallthroughAttrs.ts | 7 ++-- .../src/transforms/ssrTransformComponent.ts | 41 +++++++++++-------- .../src/transforms/ssrTransformSuspense.ts | 32 ++++++++------- .../package.json | 13 +++--- .../hippy-vue-next-style-parser/package.json | 4 +- .../js/packages/hippy-vue-next/package.json | 8 ++-- .../packages/hippy-vue-next/src/patch-prop.ts | 3 -- 18 files changed, 190 insertions(+), 81 deletions(-) diff --git a/driver/js/examples/hippy-vue-next-demo/package.json b/driver/js/examples/hippy-vue-next-demo/package.json index 1b311547f29..49bf7deac60 100644 --- a/driver/js/examples/hippy-vue-next-demo/package.json +++ b/driver/js/examples/hippy-vue-next-demo/package.json @@ -19,9 +19,9 @@ "@hippy/vue-next": "v3.3-latest", "@hippy/vue-router-next-history": "0.0.1", "@hippy/web-renderer": "latest", - "@vue/runtime-core": "^3.2.46", - "@vue/shared": "^3.2.46", - "vue": "^3.2.46", + "@vue/runtime-core": "^3.4.32", + "@vue/shared": "^3.4.32", + "vue": "^3.4.32", "vue-router": "^4.0.12" }, "devDependencies": { @@ -43,7 +43,7 @@ "@hippy/vue-css-loader": "v3.3-latest", "@vitejs/plugin-vue": "^1.9.4", "@vue/cli-service": "^4.5.19", - "@vue/compiler-sfc": "^3.2.46", + "@vue/compiler-sfc": "^3.4.32", "babel-loader": "^8.1.0", "case-sensitive-paths-webpack-plugin": "^2.2.0", "clean-webpack-plugin": "^4.0.0", diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/README.md b/driver/js/examples/hippy-vue-next-ssr-demo/README.md index 77dccfdfd48..6429d65e1ff 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/README.md +++ b/driver/js/examples/hippy-vue-next-ssr-demo/README.md @@ -25,7 +25,7 @@ ensure you were at `examples/hippy-vue-next-ssr-demo`. #### Development -1. run `npm run ssr:dev-build` to build client entry & client bundle, then running hippy debug server +1. run `npm run ssr:dev-client` to build client entry & client bundle, then running hippy debug server 2. run `npm run ssr:dev-server` to build server bundle and start SSR web server to listen port **8080**. 3. debug your app with [reference](https://hippyjs.org/en-us/#/guide/debug) > You can change server listen port 8080 in `server.ts` by your self, but you also need change request port 8080 in diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/package.json b/driver/js/examples/hippy-vue-next-ssr-demo/package.json index 367d4bffe81..90a2f4ee02e 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/package.json +++ b/driver/js/examples/hippy-vue-next-ssr-demo/package.json @@ -24,12 +24,13 @@ "@hippy/vue-router-next-history": "latest", "@hippy/web-renderer": "latest", "@hippy/vue-next": "latest", - "@hippy/vue-next-server-renderer": "file:../../packages/hippy-vue-next-server-renderer", - "@hippy/vue-next-style-parser": "file:../../packages/hippy-vue-next-style-parser", - "@vue/runtime-core": "^3.2.46", - "@vue/shared": "^3.2.46", + "@hippy/vue-next-server-renderer": "latest", + "@hippy/hippy-vue-next-style-parser": "latest", + "@vue/runtime-core": "^3.4.32", + "@vue/server-renderer": "^3.4.32", + "@vue/shared": "^3.4.32", "core-js": "^3.20.2", - "vue": "^3.2.46", + "vue": "^3.4.32", "vue-router": "^4.0.12", "express": "^4.18.2", "pinia": "2.0.30" @@ -52,10 +53,10 @@ "@hippy/rejection-tracking-polyfill": "^1.0.0", "@hippy/vue-css-loader": "^2.0.1", "@vitejs/plugin-vue": "^1.9.4", - "@hippy/vue-next-compiler-ssr": "file:../../packages/hippy-vue-next-compiler-ssr", + "@hippy/vue-next-compiler-ssr": "latest", "@types/shelljs": "^0.8.5", "@vue/cli-service": "^4.5.19", - "@vue/compiler-sfc": "^3.2.46", + "@vue/compiler-sfc": "^3.4.32", "babel-loader": "^8.1.0", "case-sensitive-paths-webpack-plugin": "^2.2.0", "chokidar": "^3.5.3", diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js index f465c4ff488..cab3754f326 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js @@ -189,6 +189,26 @@ module.exports = { console.warn('* Using the @hippy/vue-next defined in package.json'); } + // If @hippy/vue-next-style-parser was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextStyleParserPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-style-parser/dist'); + if (fs.existsSync(path.resolve(hippyVueNextStyleParserPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-style-parser in ${hippyVueNextStyleParserPath} as @hippy/vue-next-style-parser alias`); + aliases['@hippy/vue-next-style-parser'] = hippyVueNextStyleParserPath; + } else { + console.warn('* Using the @hippy/vue-next-style-parser defined in package.json'); + } + + // If @hippy/vue-next-server-render was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-server-renderer/dist'); + if (fs.existsSync(path.resolve(hippyVueNextSsrPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-server-renderer in ${hippyVueNextSsrPath} as @hippy/vue-next-server-renderer alias`); + aliases['@hippy/vue-next-server-renderer'] = hippyVueNextSsrPath; + } else { + console.warn('* Using the @hippy/vue-next-server-renderer defined in package.json'); + } + return aliases; })(), }, diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js index f710f743a1b..660cc908186 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js @@ -2,6 +2,7 @@ const path = require('path'); const webpack = require('webpack'); const pkg = require('../../package.json'); +const fs = require('fs') module.exports = { mode: 'production', @@ -90,8 +91,32 @@ module.exports = { }, resolve: { extensions: ['.js', '.json', '.ts'], - alias: (() => ({ - src: path.resolve('./src'), - }))(), + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @hippy/vue-next-style-parser was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextStyleParserPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-style-parser/dist'); + if (fs.existsSync(path.resolve(hippyVueNextStyleParserPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-style-parser in ${hippyVueNextStyleParserPath} as @hippy/vue-next-style-parser alias`); + aliases['@hippy/vue-next-style-parser'] = hippyVueNextStyleParserPath; + } else { + console.warn('* Using the @hippy/vue-next-style-parser defined in package.json'); + } + + // If @hippy/vue-next-server-render was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-server-renderer/dist'); + if (fs.existsSync(path.resolve(hippyVueNextSsrPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-server-renderer in ${hippyVueNextSsrPath} as @hippy/vue-next-server-renderer alias`); + aliases['@hippy/vue-next-server-renderer'] = hippyVueNextSsrPath; + } else { + console.warn('* Using the @hippy/vue-next-server-renderer defined in package.json'); + } + + return aliases; + })(), }, }; diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js index e82008654ed..770a4d7b9f7 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js @@ -3,7 +3,7 @@ const fs = require('fs'); const webpack = require('webpack'); const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); -const compilerSSR = require('@hippy/vue-next-compiler-ssr'); + const { VueLoaderPlugin } = require('vue-loader'); const pkg = require('../../package.json'); @@ -24,9 +24,20 @@ if (fs.existsSync(hippyVueNextPath)) { } else { console.warn('* Using the @hippy/vue-next defined in package.json'); } -const { isNativeTag } = require(vueNext); + +let compilerSsrPkg = '@hippy/vue-next-compiler-ssr' +let compilerSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-compiler-ssr/dist/index.js'); +if (fs.existsSync(compilerSsrPath)) { + console.warn(`* Using the @hippy/vue-next-compiler-ssr in ${compilerSsrPath}`); + compilerSsrPkg = compilerSsrPath +} else { + console.warn('* Using the @hippy/vue-next-compiler-ssr defined in package.json'); +} +const { isNativeTag } = require(vueNext); +const compilerSsr = require(compilerSsrPkg); + module.exports = { mode: 'development', bail: true, @@ -83,7 +94,7 @@ module.exports = { comments: false, }, // real used vue compiler - compiler: compilerSSR, + compiler: compilerSsr, }, }, ], @@ -177,6 +188,16 @@ module.exports = { console.warn('* Using the @hippy/vue-next defined in package.json'); } + // If @hippy/vue-next-server-render was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-server-renderer/dist'); + if (fs.existsSync(path.resolve(hippyVueNextSsrPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-server-renderer in ${hippyVueNextSsrPath} as @hippy/vue-next-server-renderer alias`); + aliases['@hippy/vue-next-server-renderer'] = hippyVueNextSsrPath; + } else { + console.warn('* Using the @hippy/vue-next-server-renderer defined in package.json'); + } + return aliases; })(), }, diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js index 3ecee4aea93..b67c138c5ce 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js +++ b/driver/js/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js @@ -3,7 +3,6 @@ const fs = require('fs'); const webpack = require('webpack'); const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); -const compilerSSR = require('@hippy/vue-next-compiler-ssr'); const { VueLoaderPlugin } = require('vue-loader'); const pkg = require('../../package.json'); @@ -24,7 +23,18 @@ if (fs.existsSync(hippyVueNextPath)) { } else { console.warn('* Using the @hippy/vue-next defined in package.json'); } + +let compilerSsrPkg = '@hippy/vue-next-compiler-ssr' +let compilerSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-compiler-ssr/dist/index.js'); +if (fs.existsSync(compilerSsrPath)) { + console.warn(`* Using the @hippy/vue-next-compiler-ssr in ${compilerSsrPath}`); + compilerSsrPkg = compilerSsrPath +} else { + console.warn('* Using the @hippy/vue-next-compiler-ssr defined in package.json'); +} + const { isNativeTag } = require(vueNext); +const compilerSsr = require(compilerSsrPkg); module.exports = { mode: 'production', @@ -77,7 +87,7 @@ module.exports = { comments: false, }, // real used vue compiler - compiler: compilerSSR, + compiler: compilerSsr, }, }, ], @@ -171,6 +181,16 @@ module.exports = { console.warn('* Using the @hippy/vue-next defined in package.json'); } + // If @hippy/vue-next-server-render was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextSsrPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next-server-renderer/dist'); + if (fs.existsSync(path.resolve(hippyVueNextSsrPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next-server-renderer in ${hippyVueNextSsrPath} as @hippy/vue-next-server-renderer alias`); + aliases['@hippy/vue-next-server-renderer'] = hippyVueNextSsrPath; + } else { + console.warn('* Using the @hippy/vue-next-server-renderer defined in package.json'); + } + return aliases; })(), }, diff --git a/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue b/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue index bb96e1b1097..65058aea3ef 100644 --- a/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue +++ b/driver/js/examples/hippy-vue-next-ssr-demo/src/app.vue @@ -11,7 +11,7 @@ + >Hippy Vue Next {{ ssrMsg }}