From 952f2f7cc282c420ded64740d75e9b3a4974474f Mon Sep 17 00:00:00 2001 From: birdguo Date: Fri, 19 Jan 2024 21:08:42 +0800 Subject: [PATCH] feature(vue-next): hippy vue next ssr (#3526) * feat(hippy-vue-next): add ssr style parser * feat(hippy-vue-next): add ssr runtime support * feat(vue-next): add server renderer package * feat(vue-next): server-renderer normal version commit * feat(vue-next): optimize text render function * feat(vue-next): add ssr render & compiler package * feat(vue-next): init vue-next-ssr-demo * feat(vue-next): ssr support scoped style & ssr bug fix * feat(vue-next): fix ssr style issue * feat(vue-next): fix ssr demo problem * feat(vue-next): add webpack ssr build config * feat(vue-next): webpack ssr demo commit * feat(vue-next): fix build problem * feat(vue-next): fix build problem * feat(vue-next): fix ssr build problem * docs(vue-next): add ssr description doc * docs(vue-next): add how to use ssr doc& update demo readme * docs(vue-next): add ssr how to use and description * docs(vue-next): add ssr architecture image * feat(vue-next): add ssr store usage & update docs * feat(vue-next): add ssr unit-test and style parser unit-test * feat(vue-next): add server-render unit test case * feat(vue-next): add server-render vnode unit test case * feat(vue-next): add server-render unit test case * feat(vue-next): add compiler-ssr unit test case * feat(vue-next): add ssr related unit test case & commit * feat(vue-next): commit totally native component ssr support * feat(vue-next): complete ssr render event map * feat(vue-next): complete ssr render event map & add unit test case * feat(vue-next): complete ssr render event map & add unit test case * Revert "feat(vue-next): complete ssr render event map & add unit test case" This reverts commit 72ac570f4ef0a424d04a8bc20d8e08b6aad8154b. * feat(vue-next): add unit test setup file * feat(vue-next): resolve fragment render problem * feat(vue-next): fix native component render problem * feat(vue-next): modify native component render unit test case * fix(vue-next): fix websocket demo field name issue * fix(vue-next): fix ssr demo platform issue * fix(vue-next): fix ssr text node render issue * feat(vue-next): add ssr text node render unit test case * feat(vue-next-demo): optimize ssr build * feat(vue-next): compatible node props and style props * feat(vue-next): compatible fontWeight && placeholder * feat(vue-next): specify ssr package types & update demo pinia version * feat(vue-next): compatible iframe ssr load issue * feat(vue-next): compatible ssr style & store issue * feat(vue-next): fix iframe ssr props issue * feat(vue-next): fix textInput ssr props & style issue * feat(vue-next): fix waterfall ssr issue * feat(vue-next): fix pull-header-footer ssr issue * feat(vue-next): fix nested scroll ssr issue * feat(vue-next): fix loop animation ssr issue * feat(vue-next): fix animation demo ssr issue * feat(vue-next): fix div demo & css comment property issue * feat(vue-next): fix all ssr demo issue * feat(vue-next): commit ssr dev mode all logic * feat(vue-next): dev & build tools complete * feat(vue-next): optimize dev experience * docs(vue-next): update ssr usage doc * feat(vue-next): add ssr render & style unit test case * feat(vue-next): add ssr style-parse & ssr node parse unit test case * docs(vue-next): optimize ssr doc * feat(vue-next): update ssr demo node engines min version * feat(vue-next): optimize ssr render string transform performance * feat(vue-next): add new dir for ssr demo * feat(vue-next): fix ssr demo issue & optimize comment * feat(vue-next): fix div demo issue & native background android issue * docs(vue-next): update ssr docs * docs(vue-next): update vue-next ssr docs --- .eslintrc.js | 3 + .../assets/img/hippy-vue-next-ssr-arch-cn.png | Bin 0 -> 125756 bytes .../assets/img/hippy-vue-next-ssr-arch-en.png | Bin 0 -> 123900 bytes docs/en-us/hippy-vue/vue3.md | 137 ++++- docs/hippy-vue/vue3.md | 114 +++- .../src/components/Modal/index.jsx | 22 +- examples/hippy-vue-next-ssr-demo/.gitignore | 21 + examples/hippy-vue-next-ssr-demo/.npmrc | 1 + examples/hippy-vue-next-ssr-demo/README.md | 46 ++ examples/hippy-vue-next-ssr-demo/app.d.ts | 10 + examples/hippy-vue-next-ssr-demo/package.json | 85 +++ .../public/favicon.ico | Bin 0 -> 4286 bytes .../hippy-vue-next-ssr-demo/public/index.html | 39 ++ .../public/web-renderer.html | 17 + .../scripts/env-polyfill.js | 61 ++ .../scripts/hippy-webpack.android-vendor.js | 108 ++++ .../scripts/hippy-webpack.android.js | 169 ++++++ .../scripts/hippy-webpack.dev.js | 179 ++++++ .../scripts/hippy-webpack.ios-vendor.js | 108 ++++ .../scripts/hippy-webpack.ios.js | 169 ++++++ .../scripts/hippy-webpack.web-renderer.dev.js | 165 ++++++ .../scripts/hippy-webpack.web-renderer.js | 166 ++++++ .../hippy-vue-next-ssr-demo/scripts/vendor.js | 1 + .../webpack-ssr-config/client.android.js | 3 + .../client.android.vendor.js | 108 ++++ .../scripts/webpack-ssr-config/client.base.js | 181 ++++++ .../scripts/webpack-ssr-config/client.dev.js | 195 ++++++ .../webpack-ssr-config/client.entry.js | 97 +++ .../scripts/webpack-ssr-config/client.ios.js | 3 + .../webpack-ssr-config/client.ios.vendor.js | 108 ++++ .../scripts/webpack-ssr-config/server.dev.js | 186 ++++++ .../webpack-ssr-config/server.entry.js | 177 ++++++ .../scripts/webpack.ssr.build.js | 109 ++++ .../scripts/webpack.ssr.dev.js | 39 ++ examples/hippy-vue-next-ssr-demo/server.ts | 80 +++ examples/hippy-vue-next-ssr-demo/src/app.vue | 260 ++++++++ .../src/assets/defaultSource.jpg | Bin 0 -> 42281 bytes .../src/assets/hippyLogoWhite.png | Bin 0 -> 24639 bytes .../src/assets/logo.png | Bin 0 -> 6849 bytes .../hippy-vue-next-ssr-demo/src/back-icon.png | Bin 0 -> 2166 bytes .../src/components/demo/demo-button.vue | 130 ++++ .../src/components/demo/demo-div.vue | 323 ++++++++++ .../components/demo/demo-dynamicimport.vue | 101 ++++ .../src/components/demo/demo-iframe.vue | 121 ++++ .../src/components/demo/demo-img.vue | 164 +++++ .../src/components/demo/demo-input.vue | 268 +++++++++ .../src/components/demo/demo-list.vue | 321 ++++++++++ .../src/components/demo/demo-p.vue | 557 +++++++++++++++++ .../src/components/demo/demo-ripple-div.vue | 99 ++++ .../components/demo/demo-set-native-props.vue | 123 ++++ .../src/components/demo/demo-shadow.vue | 204 +++++++ .../src/components/demo/demo-textarea.vue | 129 ++++ .../src/components/demo/demo-turbo.vue | 130 ++++ .../src/components/demo/demo-websocket.vue | 201 +++++++ .../src/components/demo/demoTurbo.ts | 29 + .../dynamicImport/async-component-http.vue | 36 ++ .../dynamicImport/async-component-local.vue | 33 ++ .../src/components/demo/index.ts | 65 ++ .../src/components/list-items/index.ts | 5 + .../src/components/list-items/mock.ts | 43 ++ .../src/components/list-items/style1.vue | 38 ++ .../src/components/list-items/style2.vue | 38 ++ .../src/components/list-items/style5.vue | 36 ++ .../native-demo/animations/color-change.vue | 108 ++++ .../native-demo/animations/cubic-bezier.vue | 100 ++++ .../native-demo/animations/down-vote-face.png | Bin 0 -> 341 bytes .../native-demo/animations/loop.vue | 133 +++++ .../native-demo/animations/up-vote-eye.png | Bin 0 -> 333 bytes .../native-demo/animations/up-vote-mouth.png | Bin 0 -> 598 bytes .../native-demo/animations/vote-down.vue | 198 +++++++ .../native-demo/animations/vote-up.vue | 196 ++++++ .../components/native-demo/demo-animation.vue | 196 ++++++ .../components/native-demo/demo-dialog.vue | 221 +++++++ .../native-demo/demo-nested-scroll.vue | 153 +++++ .../native-demo/demo-pull-header-footer.vue | 409 +++++++++++++ .../components/native-demo/demo-swiper.vue | 179 ++++++ .../native-demo/demo-vue-native.vue | 559 ++++++++++++++++++ .../components/native-demo/demo-waterfall.vue | 295 +++++++++ .../src/components/native-demo/index.ts | 45 ++ examples/hippy-vue-next-ssr-demo/src/env.ts | 19 + .../hippy-vue-next-ssr-demo/src/extend.ts | 28 + .../src/main-client.ts | 150 +++++ .../src/main-native.ts | 154 +++++ .../src/main-server.ts | 56 ++ .../hippy-vue-next-ssr-demo/src/main-web.ts | 22 + .../src/pages/menu.vue | 143 +++++ .../src/pages/remote-debug.vue | 162 +++++ .../hippy-vue-next-ssr-demo/src/routes.ts | 38 ++ .../src/ssr-node-ops.ts | 532 +++++++++++++++++ examples/hippy-vue-next-ssr-demo/src/store.ts | 24 + examples/hippy-vue-next-ssr-demo/src/util.ts | 60 ++ .../src/webpack-plugin.ts | 30 + .../hippy-vue-next-ssr-demo/tsconfig.json | 35 ++ package.json | 7 +- .../hippy-vue-next-compiler-ssr/README.md | 6 + .../__test__/component.test.ts | 132 +++++ .../__test__/element.test.ts | 245 ++++++++ .../__test__/setup.ts | 19 + .../__test__/slot-out.test.ts | 56 ++ .../__test__/utils.ts | 38 ++ .../__test__/vue-built-in.test.ts | 58 ++ .../api-extractor.json | 38 ++ .../package-lock.json | 115 ++++ .../hippy-vue-next-compiler-ssr/package.json | 49 ++ .../hippy-vue-next-compiler-ssr/src/errors.ts | 54 ++ .../hippy-vue-next-compiler-ssr/src/index.ts | 122 ++++ .../src/runtimeHelpers.ts | 70 +++ .../src/ssrCodegenTransform.ts | 261 ++++++++ .../src/transforms/ssrInjectCssVars.ts | 91 +++ .../transforms/ssrInjectFallthroughAttrs.ts | 111 ++++ .../src/transforms/ssrTransformComponent.ts | 400 +++++++++++++ .../src/transforms/ssrTransformElement.ts | 477 +++++++++++++++ .../src/transforms/ssrTransformSlotOutlet.ts | 113 ++++ .../src/transforms/ssrTransformSuspense.ts | 102 ++++ .../src/transforms/ssrTransformTeleport.ts | 93 +++ .../transforms/ssrTransformTransitionGroup.ts | 128 ++++ .../src/transforms/ssrVFor.ts | 70 +++ .../src/transforms/ssrVIf.ts | 102 ++++ .../src/transforms/ssrVModel.ts | 184 ++++++ .../src/transforms/ssrVShow.ts | 54 ++ .../hippy-vue-next-server-renderer/README.md | 6 + .../__test__/native.test.ts | 102 ++++ .../__test__/render-attr.test.ts | 51 ++ .../__test__/render-vnode.test.ts | 528 +++++++++++++++++ .../__test__/renderer.test.ts | 148 +++++ .../__test__/setup.ts | 19 + .../__test__/util.test.ts | 33 ++ .../api-extractor.json | 38 ++ .../package-lock.json | 435 ++++++++++++++ .../package.json | 54 ++ .../src/index.ts | 117 ++++ .../src/native.ts | 103 ++++ .../src/render-attrs.ts | 102 ++++ .../src/render-component.ts | 48 ++ .../src/render-vnode.ts | 511 ++++++++++++++++ .../src/renderer.ts | 490 +++++++++++++++ .../src/util.ts | 80 +++ .../hippy-vue-next-style-parser/README.md | 11 +- .../__test__/setup.ts | 80 +++ .../__test__/style-match/css-append.test.ts | 128 ++++ .../__test__/style-match}/index.test.ts | 119 +++- .../__test__/style-match}/parser.test.ts | 12 +- .../style-parser/color-parser.test.ts | 68 +++ .../__test__/style-parser/css-parser.test.ts | 118 ++++ .../package-lock.json | 15 +- .../hippy-vue-next-style-parser/package.json | 25 +- .../hippy-vue-next-style-parser/src/index.ts | 6 + .../src/style-match/css-append.ts | 392 ++++++++++++ .../src/style-match/css-map.ts | 247 ++++++++ .../src/style-match}/css-selectors-match.ts | 40 +- .../src/style-match}/css-selectors.ts | 119 ++-- .../src/style-match/index.ts | 71 +++ .../src/style-match}/parser.ts | 5 +- .../src/style-parser/color-parser.ts | 6 +- .../src/style-parser/css-parser.ts | 87 +-- .../__test__/built-in-component.test.ts | 8 +- .../hippy-vue-next/__test__/node-ops.test.ts | 7 +- .../__test__/patch-prop.test.ts | 7 +- .../__test__/runtime/component/index.test.ts | 7 +- .../runtime/document/hippy-document.test.ts | 7 +- .../before-render-to-native-hook.test.ts | 3 + .../element/hippy-comment-element.test.ts | 3 + .../runtime/element/hippy-element.test.ts | 73 ++- .../element/hippy-input-element.test.ts | 3 + .../element/hippy-list-element.test.ts | 3 + .../__test__/runtime/event/event-bus.test.ts | 7 +- .../event/hippy-event-dispatcher.test.ts | 9 +- .../runtime/event/hippy-event-target.test.ts | 13 +- .../runtime/event/hippy-event.test.ts | 7 +- .../__test__/runtime/native/index.test.ts | 7 +- .../__test__/runtime/node/hipyy-node.test.ts | 32 + .../__test__/runtime/render/index.test.ts | 8 +- .../__test__/runtime/text/hippy-text.test.ts | 4 + .../__test__/util/event.test.ts | 3 +- .../hippy-vue-next/__test__/util/i18n.test.ts | 7 +- .../__test__/util/index.test.ts | 18 +- .../__test__/util/node-cache.test.ts | 4 +- .../hippy-vue-next/__test__/util/rem.test.ts | 7 +- .../__test__/util/screen.test.ts | 7 +- packages/hippy-vue-next/package-lock.json | 51 +- packages/hippy-vue-next/package.json | 7 +- packages/hippy-vue-next/src/config/index.ts | 6 + packages/hippy-vue-next/src/hydration.ts | 80 +++ packages/hippy-vue-next/src/index.ts | 119 ++-- .../src/native-component/animation.ts | 12 +- .../src/native-component/index.ts | 27 + .../src/native-component/swiper.ts | 9 +- .../runtime/element/hippy-comment-element.ts | 8 +- .../src/runtime/element/hippy-element.ts | 130 +++- .../src/runtime/native/index.ts | 35 +- .../src/runtime/node/hippy-node.ts | 45 +- .../src/runtime/style/css-map.ts | 71 --- .../hippy-vue-next/src/runtime/style/index.ts | 136 ----- .../src/runtime/text/hippy-text.ts | 8 +- .../src/runtime/websocket/websocket.ts | 1 - packages/hippy-vue-next/src/types/index.ts | 32 + packages/hippy-vue-next/src/util/index.ts | 26 +- scripts/build.js | 1 - scripts/vue-next-configs.js | 120 +++- tsconfig.json | 2 + 200 files changed, 18722 insertions(+), 673 deletions(-) create mode 100644 docs/assets/img/hippy-vue-next-ssr-arch-cn.png create mode 100644 docs/en-us/assets/img/hippy-vue-next-ssr-arch-en.png create mode 100644 examples/hippy-vue-next-ssr-demo/.gitignore create mode 100644 examples/hippy-vue-next-ssr-demo/.npmrc create mode 100644 examples/hippy-vue-next-ssr-demo/README.md create mode 100644 examples/hippy-vue-next-ssr-demo/app.d.ts create mode 100644 examples/hippy-vue-next-ssr-demo/package.json create mode 100644 examples/hippy-vue-next-ssr-demo/public/favicon.ico create mode 100644 examples/hippy-vue-next-ssr-demo/public/index.html create mode 100644 examples/hippy-vue-next-ssr-demo/public/web-renderer.html create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android-vendor.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios-vendor.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/vendor.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js create mode 100644 examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js create mode 100644 examples/hippy-vue-next-ssr-demo/server.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/app.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg create mode 100644 examples/hippy-vue-next-ssr-demo/src/assets/hippyLogoWhite.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/assets/logo.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/back-icon.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-img.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-input.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-list.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-p.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-ripple-div.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-set-native-props.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-shadow.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-textarea.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-turbo.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demo-websocket.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/demoTurbo.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/dynamicImport/async-component-http.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/dynamicImport/async-component-local.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/demo/index.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/list-items/index.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/list-items/mock.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/list-items/style1.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/list-items/style2.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/list-items/style5.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/color-change.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/cubic-bezier.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/down-vote-face.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/loop.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/up-vote-eye.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/up-vote-mouth.png create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/vote-down.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/animations/vote-up.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-animation.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-dialog.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-nested-scroll.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-pull-header-footer.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-swiper.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-vue-native.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/demo-waterfall.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/components/native-demo/index.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/env.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/extend.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/main-client.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/main-native.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/main-server.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/main-web.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/pages/menu.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/pages/remote-debug.vue create mode 100644 examples/hippy-vue-next-ssr-demo/src/routes.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/ssr-node-ops.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/store.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/util.ts create mode 100644 examples/hippy-vue-next-ssr-demo/src/webpack-plugin.ts create mode 100644 examples/hippy-vue-next-ssr-demo/tsconfig.json create mode 100644 packages/hippy-vue-next-compiler-ssr/README.md create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/component.test.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/element.test.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/setup.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/slot-out.test.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/utils.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/__test__/vue-built-in.test.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/api-extractor.json create mode 100644 packages/hippy-vue-next-compiler-ssr/package-lock.json create mode 100644 packages/hippy-vue-next-compiler-ssr/package.json create mode 100644 packages/hippy-vue-next-compiler-ssr/src/errors.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/index.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/runtimeHelpers.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/ssrCodegenTransform.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrInjectCssVars.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrInjectFallthroughAttrs.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformComponent.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformElement.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformSlotOutlet.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformSuspense.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformTeleport.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVFor.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVIf.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVModel.ts create mode 100644 packages/hippy-vue-next-compiler-ssr/src/transforms/ssrVShow.ts create mode 100644 packages/hippy-vue-next-server-renderer/README.md create mode 100644 packages/hippy-vue-next-server-renderer/__test__/native.test.ts create mode 100644 packages/hippy-vue-next-server-renderer/__test__/render-attr.test.ts create mode 100644 packages/hippy-vue-next-server-renderer/__test__/render-vnode.test.ts create mode 100644 packages/hippy-vue-next-server-renderer/__test__/renderer.test.ts create mode 100644 packages/hippy-vue-next-server-renderer/__test__/setup.ts create mode 100644 packages/hippy-vue-next-server-renderer/__test__/util.test.ts create mode 100644 packages/hippy-vue-next-server-renderer/api-extractor.json create mode 100644 packages/hippy-vue-next-server-renderer/package-lock.json create mode 100644 packages/hippy-vue-next-server-renderer/package.json create mode 100644 packages/hippy-vue-next-server-renderer/src/index.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/native.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/render-attrs.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/render-component.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/render-vnode.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/renderer.ts create mode 100644 packages/hippy-vue-next-server-renderer/src/util.ts create mode 100644 packages/hippy-vue-next-style-parser/__test__/setup.ts create mode 100644 packages/hippy-vue-next-style-parser/__test__/style-match/css-append.test.ts rename packages/{hippy-vue-next/__test__/runtime/style => hippy-vue-next-style-parser/__test__/style-match}/index.test.ts (80%) rename packages/{hippy-vue-next/__test__/runtime/style => hippy-vue-next-style-parser/__test__/style-match}/parser.test.ts (92%) create mode 100644 packages/hippy-vue-next-style-parser/__test__/style-parser/color-parser.test.ts create mode 100644 packages/hippy-vue-next-style-parser/__test__/style-parser/css-parser.test.ts create mode 100644 packages/hippy-vue-next-style-parser/src/style-match/css-append.ts create mode 100644 packages/hippy-vue-next-style-parser/src/style-match/css-map.ts rename packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/css-selectors-match.ts (84%) rename packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/css-selectors.ts (82%) create mode 100644 packages/hippy-vue-next-style-parser/src/style-match/index.ts rename packages/{hippy-vue-next/src/runtime/style => hippy-vue-next-style-parser/src/style-match}/parser.ts (98%) create mode 100644 packages/hippy-vue-next/src/hydration.ts delete mode 100644 packages/hippy-vue-next/src/runtime/style/css-map.ts delete mode 100644 packages/hippy-vue-next/src/runtime/style/index.ts diff --git a/.eslintrc.js b/.eslintrc.js index eac07bd9312..e0363d4dc4c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -68,6 +68,7 @@ module.exports = { '@typescript-eslint/consistent-type-assertions': 'off', '@typescript-eslint/naming-convention': 'off', '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/no-require-imports': 'off', }, parserOptions: { project: ['./**/tsconfig.json'], @@ -169,6 +170,8 @@ module.exports = { ['sfc', resolveVue('sfc')], ['he', path.resolve(__dirname, './packages/hippy-vue/src/util/entity-decoder')], ['@hippy-vue-next-style-parser', resolvePackage('hippy-vue-next-style-parser')], + ['@hippy-vue-next', resolvePackage('hippy-vue-next')], + ['@hippy-vue-next-server-renderer', resolvePackage('hippy-vue-next-server-renderer')], ], }, }, diff --git a/docs/assets/img/hippy-vue-next-ssr-arch-cn.png b/docs/assets/img/hippy-vue-next-ssr-arch-cn.png new file mode 100644 index 0000000000000000000000000000000000000000..df95922560ea28ca27da9e9d024a30964e48eed4 GIT binary patch literal 125756 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 @@ -77,15 +77,15 @@ export default defineComponent({

@@ -147,7 +147,7 @@ const routes = [ path: '/', component: Index, }, -]; +]; const router = createRouter({ history: createMemoryHistory(), @@ -155,7 +155,6 @@ const router = createRouter({ }); ``` - # Custom Components & Modules In @hippy/vue-next, the `registerElement` method is also available for registering custom components and mapping tags in the template to native components. @@ -402,13 +401,113 @@ function isCustomTag(tag) { }, ``` +# Server Side Render + +@hippy/vue-next is now supported SSR, the specific code can be viewed in [Demo](https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-ssr-demo)'s SSR Part +, For the implementation and principle of Vue SSR, you can refer to the [official document](https://cn.vuejs.org/guide/scaling-up/ssr.html)。 + +## How To Use SSR + +Read `How To Use SSR` in [Demo](https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-ssr-demo) + +## Principle + +### SSR Architecture + +hippy-vue-next SSR Architecture + +### Description + +The implementation of @hippy/vue-next SSR involves three operating environments: compile time, client runtime, and server runtime. On the basis of vue-next ssr, we developed @hippy/vue-next-server-renderer +Used for server-side runtime node rendering, developed @hippy/vue-next-compiler-ssr for compiling vue template files at compile time. And @hippy/vue-next-style-parser for server-side rendering +Style insertion for Native Node List. Let's illustrate what @hippy/vue-next SSR does through the compilation and runtime process of a template + +We have a template like `
` + +- Compiler + + Through @hippy/vue-next-compiler-ssr, our template transform to render funtions like + + ```javascript + _push(`{"id":${ssrGetUniqueId()},"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[]},`) + ``` + +- Server Side Runtime + + Through @hippy/vue-next-server-renderer, render function obtained during compilation is executed to obtain the json object of the corresponding node. + Note that the ssrGetUniqueId method in the render function is provided in @hippy/vue-next-server-renderer, where the server-renderer will also process + the attribute values of the nodes, and finally get the json object of the Native Node + + ```javascript + { "id":1,"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[] } + ``` + + > For the handwritten non-sfc template rendering function, it cannot be processed in the compiler, and it is also executed in the server-renderer + +- Client Side Runtime + + Through @hippy/vue-next-style-parser, nodes returned by server are insert styles, and insert node props by @hippy/vue-next. Then insert native nodes to + native to complete rendering node on screen. + After the node is inserted to the screen, the asynchronous jsBundle on the client side is loaded asynchronously through the global.dynamicLoad provided + by the system to complete the Hydrate on the client side and execute the follow-up process. + +## Different + +There are some differences between the Demo initialization of the SSR version and the initialization of the asynchronous version. Here is a detailed description of the differences + +- src/main-native.ts Change + +1. Use createSSRApp to replace the previous createApp, createApp only supports CSR rendering, while createSSRApp supports both CSR and SSR +2. The ssrNodeList parameter is added during initialization as the Hydrate initialization node list. Here the initialized node list returned by our server is stored in global.hippySSRNodes, and pass it as a parameter to createSSRApp when calling it. +3. Call app.mount after router.isReady is completed, because if you don’t wait for the routing to complete, it will be different from the node rendered by the server, causing Hydrate to report an error + +```javascript +- import { createApp } from '@hippy/vue-next'; ++ import { createSSRApp } from '@hippy/vue-next'; +- const app: HippyApp = createApp(App, { ++ const app: HippyApp = createSSRApp(App, { + // ssr rendered node list, use for hydration ++ ssrNodeList: global.hippySSRNodes, +}); ++ router.isReady().then(() => { ++ // mount app ++ app.mount('#root'); ++ }); +``` + +- src/main-server.ts Add + +main-server.ts is the business jsBundle running on the server side, so no code splitting is required. The whole can be built as a bundle. Its core function is to complete the first-screen rendering logic on the server side, process the obtained first-screen Hippy node, insert node attributes and store (if it exists), and return. +And return the maximum uniqueId of the currently generated node for subsequent use by the client. + +>Note that the server-side code is executed synchronously. If a data request is made asynchronously, the request may have been returned before the data is obtained. For this problem, Vue SSR provides a dedicated API to handle this problem: +>[onServerPrefetch](https://cn.vuejs.org/api/composition-api-lifecycle.html#onserverprefetch). +>There is also an example of using onServerPrefetch in app.vue of [Demo](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-next-ssr-demo/src/app.vue) + +- server.ts Add + +server.ts is the entry file executed by the server. Its role is to provide a Web Server, receive the SSR CGI request from the client, and return the result to the client as response data, including the rendering node list, store, and global style list. + +- src/main-client.ts Add + +main-client.ts is the entry file executed by the client. Unlike the previous pure client rendering, the client entry file of SSR only includes the request to obtain the first screen node, insert the first screen node style, and insert the node into the terminal to complete the rendering. related logic. + +- src/ssr-node-ops.ts Add + +ssr-node-ops.ts encapsulates the operation logic of inserting, updating, and deleting SSR nodes that do not depend on @hippy/vue-next runtime. + +- src/webpack-plugin.ts Add + +webpack-plugin.ts encapsulates the initialization logic of Hippy App required for SSR rendering. + + # Additional Differences @hippy/vue-next is basically functionally aligned with @hippy/vue now, but the APIs are slightly different from @hippy/vue, and there are still some problems that have not been solved, here is the description: - Vue.Native - In @hippy/vue, the capabilities provided by Native are provided by the Native attribute mounted on the global Vue. In Vue3.x, this implementation is no longer feasible. You can access Native as follows: + In @hippy/vue, the capabilities provided by Native are provided by the Native attribute mounted on the global Vue. In Vue3.x, this implementation is no longer feasible. You can access Native as follows: ```javascript import { Native } from '@hippy/vue-next'; @@ -475,9 +574,9 @@ function isCustomTag(tag) { - Type hints for native APIs and customized components - @hippy/vue-next provides type hints for native APIs. + @hippy/vue-next provides type hints for native APIs. If there is a customized native api, it can also be extended in a similar way - + ```javascript declare module '@hippy/vue-next' { export interface NativeInterfaceMap { diff --git a/docs/hippy-vue/vue3.md b/docs/hippy-vue/vue3.md index 7be51d03f51..349a58c7a55 100644 --- a/docs/hippy-vue/vue3.md +++ b/docs/hippy-vue/vue3.md @@ -27,7 +27,6 @@ demo 参考:https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-ne "@hippy/vue-router-next-history": "latest", ``` - ## 初始化 ```javascript @@ -402,6 +401,107 @@ function isCustomTag(tag) { ``` +# 服务端渲染 + +@hippy/vue-next 现已支持服务端渲染,具体代码可以查看[示例项目](https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-ssr-demo)中的 SSR +部分,关于 Vue SSR 的实现及原理,可以参考[官方文档](https://cn.vuejs.org/guide/scaling-up/ssr.html)。 + +## 如何使用SSR + +请参考[示例项目](https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-ssr-demo)说明文档中的 How To Use SSR + +## 实现原理 + +### SSR 架构图 + +hippy-vue-next SSR 架构图 + +### 详细说明 + +@hippy/vue-next SSR 的实现涉及到了编译时,客户端运行时,以及服务端运行时三个运行环境。在 vue-next ssr的基础上,我们开发了 @hippy/vue-next-server-renderer +用于服务端运行时节点的渲染,开发了 @hippy/vue-next-compiler-ssr 用于编译时 vue 模版文件的编译。以及 @hippy/vue-next-style-parser 用于服务端渲染得到的 +Native Node List 的样式插入。下面我们通过一个模版的编译和运行时过程来说明 @hippy/vue-next SSR 做了哪些事情 + +我们有形如`
`的一段模版 + +- 编译时 + + 模版经过 @hippy/vue-next-compiler-ssr 的处理,得到了形如 + + ```javascript + _push(`{"id":${ssrGetUniqueId()},"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[]},`) + ``` + + 的 render function + +- 服务端运行时 + + 在服务端运行时,编译时得到的 render function 执行后得到了对应节点的 json object。注意 render function 中的 + ssrGetUniqueId 方法,是在 @hippy/vue-next-server-renderer 中提供的,在这里 server-renderer 还会对 + 节点的属性值等进行处理,最后得到 Native Node 的 json object + + ```javascript + { "id":1,"index":0,"name":"View","tagName":"div","props":{"class":"test-class","id": "test",},"children":[] } + ``` + + > 对于手写的非 sfc 模版的渲染函数,在 compiler 中无法处理,也是在 server-renderer 中执行的 + +- 客户端运行时 + + 在客户端运行时,通过 @hippy/vue-next-style-parser,给服务端返回的节点插入样式,并直接调用 hippy native 提供的 + native API,将返回的 Native Node 对象作为参数传入,并完成节点的渲染上屏。 完成节点上屏之后,再通过系统提供的 + global.dynamicLoad 异步加载客户端异步版 jsBundle,完成客户端 Hydrate 并执行后续流程。 + +## 初始化差异 + +SSR 版本的 Demo 初始化与异步版的初始化有一些差异部分,这里对其中的差异部分做一个详细的说明 + +- src/main-native.ts 变更 + +1. 使用 createSSRApp 替换之前的 createApp,createApp 仅支持 CSR 渲染,而 createSSRApp 同时支持 CSR 和 SSR +2. 在初始化时候新增了 ssrNodeList 参数,作为 Hydrate 的初始化节点列表。这里我们服务端返回的初始化节点列表保存在了 global.hippySSRNodes 中,并将其作为参数在createSSRApp时传入 +3. 将 app.mount 放到 router.isReady 完成后调用,因为如果不等待路由完成,会与服务端渲染的节点有所不同,导致 Hydrate 时报错 + +```javascript +- import { createApp } from '@hippy/vue-next'; ++ import { createSSRApp } from '@hippy/vue-next'; +- const app: HippyApp = createApp(App, { ++ const app: HippyApp = createSSRApp(App, { + // ssr rendered node list, use for hydration ++ ssrNodeList: global.hippySSRNodes, +}); ++ router.isReady().then(() => { ++ // mount app ++ app.mount('#root'); ++ }); +``` + +- src/main-server.ts 新增 + +main-server.ts 是在服务端运行的业务 jsBundle,因此不需要做代码分割。整体构建为一个 bundle 即可。其核心功能就是在服务端完成首屏渲染逻辑,并将得到的首屏 Hippy 节点进行处理,插入节点属性和 store(如果存在)后返回, +以及返回当前已生成节点的最大 uniqueId 供客户端后续使用。 + +>注意,服务端代码是同步执行的,如果有数据请求走了异步方式,可能会出现还没有拿到数据,请求就已经返回了的情况。对于这个问题,Vue SSR 提供了专用 API 来处理这个问题: +>[onServerPrefetch](https://cn.vuejs.org/api/composition-api-lifecycle.html#onserverprefetch)。 +>在 [Demo](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-next-ssr-demo/src/app.vue) 的 app.vue 中也有 onServerPrefetch 的使用示例 + +- server.ts 新增 + +server.ts 是服务端执行的入口文件,其作用是提供 Web Server,接收客户端的 SSR CGI 请求,并将结果作为响应数据返回给客户端,包括了渲染节点列表,store,以及全局的样式列表。 + +- src/main-client.ts 新增 + +main-client.ts 是客户端执行的入口文件,与之前纯客户端渲染不同,SSR的客户端入口文件仅包含了获取首屏节点请求、插入首屏节点样式、以及将节点插入终端完成渲染的相关逻辑。 + +- src/ssr-node-ops.ts 新增 + +ssr-node-ops.ts 封装了不依赖 @hippy/vue-next 运行时的 SSR 节点的插入,更新,删除等操作逻辑 + +- src/webpack-plugin.ts 新增 + +webpack-plugin.ts 封装了 SSR 渲染所需 Hippy App 的初始化逻辑 + + # 其他差异说明 目前 `@hippy/vue-next` 与 `@hippy/vue` 功能上基本对齐,不过在 API 方面与 @hippy/vue 有一些区别,以及还有一些问题还没有解决,这里做些说明: @@ -475,8 +575,8 @@ function isCustomTag(tag) { - Native 接口和自定义组件的类型提示 - @hippy/vue-next 提供了 Native 模块接口的 Typescript 类型提示,如果有业务自定义的 Native 接口,也可以采用类似的方式进行扩展 - + @hippy/vue-next 提供了 Native 模块接口的 Typescript 类型提示,如果有业务自定义的 Native 接口,也可以采用类似的方式进行扩展 + ```javascript declare module '@hippy/vue-next' { export interface NativeInterfaceMap { @@ -485,7 +585,7 @@ function isCustomTag(tag) { } ``` - @hippy/vue-next 也参考 `lib.dom.d.ts` 的事件声明提供了事件类型,具体可以参考 hippy-event.ts 文件。如果需要在内置的事件上进行扩展,可以采用类似方式 + @hippy/vue-next 也参考 `lib.dom.d.ts` 的事件声明提供了事件类型,具体可以参考 hippy-event.ts 文件。如果需要在内置的事件上进行扩展,可以采用类似方式 ```javascript declare module '@hippy/vue-next' { @@ -495,7 +595,7 @@ function isCustomTag(tag) { } ``` - 在使用 `registerElement` 去注册组件的时候,利用了 typescript 的 `type narrowing`,在 switch case 中提供了准确的类型提示。如果在业务注册自定义组件的时候也需要类型提示,可以采用如下方式: + 在使用 `registerElement` 去注册组件的时候,利用了 typescript 的 `type narrowing`,在 switch case 中提供了准确的类型提示。如果在业务注册自定义组件的时候也需要类型提示,可以采用如下方式: ```javascript export interface HippyGlobalEventHandlersEventMap { @@ -506,8 +606,8 @@ function isCustomTag(tag) { } ``` - 更多信息可以参考 demo 里的 [extend.ts](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-next-demo/src/extend.ts). - + 更多信息可以参考 demo 里的 [extend.ts](https://github.com/Tencent/Hippy/blob/master/examples/hippy-vue-next-demo/src/extend.ts). + - whitespace 处理 Vue2.x Vue-Loader `compilerOptions.whitespace` 默认值为 `preserve`, Vue3.x 默认值为 `condense`(可参考 [Vue3 whitespace说明](https://cn.vuejs.org/api/application.html#app-config-compileroptions-whitespace))。 diff --git a/examples/hippy-react-demo/src/components/Modal/index.jsx b/examples/hippy-react-demo/src/components/Modal/index.jsx index e08f6cce27a..dc460c45d10 100644 --- a/examples/hippy-react-demo/src/components/Modal/index.jsx +++ b/examples/hippy-react-demo/src/components/Modal/index.jsx @@ -18,7 +18,7 @@ const styles = StyleSheet.create({ flex: 1, flexDirection: 'column', justifyContent: 'flex-start', - alignItems: 'center' + alignItems: 'center', }, buttonView: { borderColor: SKIN_COLOR.mainLight, @@ -95,18 +95,24 @@ export default class ModalExpo extends React.Component { 点击弹出浮层 - + {this.setState({animationType: 'fade'})}} - style={[styles.selectionText, {backgroundColor: this.state.animationType === 'fade' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF'}]} + onClick={() => { + this.setState({ animationType: 'fade' }); + }} + style={[styles.selectionText, { backgroundColor: this.state.animationType === 'fade' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF' }]} >fade {this.setState({animationType: 'slide'})}} - style={[styles.selectionText, {backgroundColor: this.state.animationType === 'slide' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF'}]} + onClick={() => { + this.setState({ animationType: 'slide' }); + }} + style={[styles.selectionText, { backgroundColor: this.state.animationType === 'slide' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF' }]} >slide {this.setState({animationType: 'slide_fade'})}} - style={[styles.selectionText, {backgroundColor: this.state.animationType === 'slide_fade' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF'}]} + onClick={() => { + this.setState({ animationType: 'slide_fade' }); + }} + style={[styles.selectionText, { backgroundColor: this.state.animationType === 'slide_fade' ? 'rgba(255, 0, 0, 0.5)' : '#FFFFFF' }]} >slide_fade Because our server listening port 8080, so if you are using android device, you should run `adb reverse tcp:8080 tcp:8080` +> to forward mobile device port to pc port, iOS simulator doesn't need this step. + +ensure you were at `examples/hippy-vue-next-demo`. + +#### Development + +1. run `npm run ssr:dev-build` 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 +> `src/main-client.ts` and modify the adb reverse port, ensure port is same at three place + +#### Production + +1. run `npm run ssr:prod-build` to build client entry, server bundle, client bundle +2. run `npm run ssr:prod-server` to start SSR web server to listen port **8080**. +3. test your app +> In production, you can use process manage tool to manage your NodeJs process, like pm2. +> +> And you should deploy you web server at real server with real domain, then you can request +> SSR cgi like https://xxx.com/getSsrFirstScreenData +> + +#### Tips +> Usage of non SSR is [here](https://hippyjs.org/en-us/#/guide/integration) diff --git a/examples/hippy-vue-next-ssr-demo/app.d.ts b/examples/hippy-vue-next-ssr-demo/app.d.ts new file mode 100644 index 00000000000..d614236bf60 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/app.d.ts @@ -0,0 +1,10 @@ +declare module '*.jpg'; +declare module '*.png'; +declare module '*.vue' { + import { defineComponent } from 'vue'; + const Component: ReturnType; + export default Component; +} + +type NeedToTyped = any; + diff --git a/examples/hippy-vue-next-ssr-demo/package.json b/examples/hippy-vue-next-ssr-demo/package.json new file mode 100644 index 00000000000..22ef80eedd2 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/package.json @@ -0,0 +1,85 @@ +{ + "name": "hippy-vue-next-demo", + "version": "2.0.0", + "description": "A Demo Example For Hippy-Vue-Next Library To Show.", + "private": true, + "webMain": "./src/main-web.ts", + "nativeMain": "./src/main-native.ts", + "serverMain": "./src/main-server.ts", + "serverEntry": "./server.ts", + "ssrMain": "./src/main-client.ts", + "repository": "https://github.com/Tencent/Hippy/tree/master/examples/hippy-vue-next-demo", + "license": "Apache-2.0", + "author": "OpenHippy Team", + "scripts": { + "hippy:dev": "node ./scripts/env-polyfill.js hippy-dev -c ./scripts/hippy-webpack.dev.js", + "hippy:vendor": "node ./scripts/env-polyfill.js webpack --config ./scripts/hippy-webpack.ios-vendor.js --config ./scripts/hippy-webpack.android-vendor.js", + "hippy:build": "node ./scripts/env-polyfill.js webpack --config ./scripts/hippy-webpack.ios.js --config ./scripts/hippy-webpack.android.js", + "web:dev": "npm run hippy:dev & node ./scripts/env-polyfill.js webpack serve --config ./scripts/hippy-webpack.web-renderer.dev.js", + "web:build": "node ./scripts/env-polyfill.js webpack --config ./scripts/hippy-webpack.web-renderer.js", + "ssr:dev-client": "node ./scripts/env-polyfill.js hippy-dev -c ./scripts/webpack-ssr-config/client.dev.js", + "ssr:dev-server": "node ./scripts/env-polyfill.js && node ./scripts/webpack.ssr.dev.js", + "ssr:prod-build": "node ./scripts/webpack.ssr.build.js", + "ssr:prod-server": "node ./dist/server/index.js --mode production" + }, + "dependencies": { + "@hippy/vue-router-next-history": "latest", + "@hippy/web-renderer": "v2.17-latest", + "@hippy/vue-next": "v2.17-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", + "core-js": "^3.20.2", + "vue": "^3.2.46", + "vue-router": "^4.0.12", + "express": "^4.18.2", + "pinia": "2.0.30" + }, + "devDependencies": { + "@babel/core": "^7.12.0", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-decorators": "^7.10.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/polyfill": "^7.12.0", + "@babel/preset-env": "^7.12.0", + "@babel/runtime": "^7.16.0", + "@hippy/debug-server-next": "latest", + "@hippy/hippy-dynamic-import-plugin": "^2.0.0", + "@hippy/hippy-hmr-plugin": "^0.1.0", + "@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", + "@types/shelljs": "^0.8.5", + "@vue/cli-service": "^4.5.19", + "@vue/compiler-sfc": "^3.2.46", + "babel-loader": "^8.1.0", + "case-sensitive-paths-webpack-plugin": "^2.2.0", + "chokidar": "^3.5.3", + "clean-webpack-plugin": "^4.0.0", + "webpack-manifest-plugin": "^4.1.1", + "cross-env": "^7.0.3", + "cross-env-os": "^7.1.1", + "esbuild": "^0.13.14", + "esbuild-loader": "^2.18.0", + "file-loader": "^4.3.0", + "less": "^4.1.2", + "less-loader": "^7.1.0", + "shelljs": "^0.8.5", + "terser": "^4.8.0", + "ts-loader": "^8.4.0", + "@types/express": "^4.17.17", + "url-loader": "^4.0.0", + "vue-loader": "^17.0.0", + "webpack": "^4.46.0", + "webpack-cli": "^4.7.2" + }, + "engines": { + "node": ">=15" + } +} diff --git a/examples/hippy-vue-next-ssr-demo/public/favicon.ico b/examples/hippy-vue-next-ssr-demo/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/examples/hippy-vue-next-ssr-demo/public/index.html b/examples/hippy-vue-next-ssr-demo/public/index.html new file mode 100644 index 00000000000..82d36221e21 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/public/index.html @@ -0,0 +1,39 @@ + + + + + + + + Hippy Vue Expo - Web + + + + +
+ + + diff --git a/examples/hippy-vue-next-ssr-demo/public/web-renderer.html b/examples/hippy-vue-next-ssr-demo/public/web-renderer.html new file mode 100644 index 00000000000..b09053793e9 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/public/web-renderer.html @@ -0,0 +1,17 @@ + + + + + + + + + +
+ + diff --git a/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js b/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js new file mode 100644 index 00000000000..19a521e3ca1 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/env-polyfill.js @@ -0,0 +1,61 @@ +const { exec } = require('shelljs'); + +const runScript = (scriptStr) => { + console.log(`Full command execute: "${scriptStr}"`); + const result = exec(scriptStr, { stdio: 'inherit' }); + if (result.code !== 0) { + console.error(`❌ Execute cmd - "${scriptStr}" error: ${result.stderr}`); + process.exit(1); + } +}; + +const toNum = (originalNum) => { + const num = `${originalNum}`; + const versionList = num.split('.'); + const currentSplitLength = versionList.length; + if (currentSplitLength !== 4) { + let index = currentSplitLength; + while (index < 4) { + versionList.push('0'); + index += 1; + } + } + const r = ['0000', '000', '00', '0', '']; + for (let i = 0; i < versionList.length; i += 1) { + let len = versionList[i].length; + if (len > 4) { + len = 4; + versionList[i] = versionList[i].slice(0, 4); + } + versionList[i] = r[len] + versionList[i]; + } + return versionList.join(''); +}; + +const versionCompare = (targetVer, currentVer) => { + if (!targetVer || !currentVer) return 1; + const numA = toNum(currentVer); + const numB = toNum(targetVer); + if (numA === numB) { + return 0; + } + return numA < numB ? -1 : 1; +}; + +const LEGACY_OPENSSL_VERSION = '3.0.0'; +const scriptString = process.argv.slice(2).join(' '); +let envPrefixStr = ''; + +console.log(`Start to execute cmd: "${scriptString}"`); +console.log(`Current openssl version: ${process.versions.openssl}`); + +const result = /^(\d+\.\d+\.\d+).*$/.exec(process.versions.openssl.toString().trim()); +if (result && result[1]) { + const currentVersion = result[1]; + const compareResult = versionCompare(LEGACY_OPENSSL_VERSION, currentVersion); + if (compareResult >= 0) { + envPrefixStr += 'cross-env-os NODE_OPTIONS=--openssl-legacy-provider'; + } +} + +runScript(`${envPrefixStr} ${scriptString}`); // start to execute cmd diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android-vendor.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android-vendor.js new file mode 100644 index 00000000000..54a2c99b29a --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android-vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const { VueLoaderPlugin } = require('vue-loader'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); + +const platform = 'android'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, './vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '..'), + path: path.resolve(__dirname, `../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android.js new file mode 100644 index 00000000000..d9810b35073 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.android.js @@ -0,0 +1,169 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); + +const platform = 'android'; +const pkg = require('../package.json'); +const manifest = require('../dist/android/vendor-manifest.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +module.exports = { + mode: 'production', + bail: true, + entry: { + index: [path.resolve(pkg.nativeMain)], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + // CDN path can be configured to load children bundles from remote server + // publicPath: 'https://xxx/hippy/hippyVueNextDemo/', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllReferencePlugin({ + context: path.resolve(__dirname, '..'), + manifest, + }), + new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 8192, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js new file mode 100644 index 00000000000..47eec32fb52 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.dev.js @@ -0,0 +1,179 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const pkg = require('../package.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + + +module.exports = { + mode: 'development', + devtool: 'source-map', + watch: true, + watchOptions: { + aggregateTimeout: 1500, + }, + devServer: { + // remote debug server address + remote: { + protocol: 'http', + host: '127.0.0.1', + port: 38989, + }, + // support inspect vue components, store and router, by default is disabled + vueDevtools: false, + // support debug multiple project with only one debug server, by default is set false. + multiple: false, + // by default hot and liveReload option are true, you could set only liveReload to true + // to use live reload + hot: true, + liveReload: true, + client: { + overlay: false, + }, + devMiddleware: { + writeToDisk: true, + }, + }, + entry: { + index: ['@hippy/rejection-tracking-polyfill', path.resolve(pkg.nativeMain)], + }, + output: { + filename: 'index.bundle', + // chunkFilename: '[name].[chunkhash].js', + strictModuleExceptionHandling: true, + path: path.resolve('./dist/dev/'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new VueLoaderPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file while setting devtool to false + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + new CleanWebpackPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'esbuild-loader', + options: { + target: 'es2015', + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios-vendor.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios-vendor.js new file mode 100644 index 00000000000..7a383bda137 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios-vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const platform = 'ios'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, './vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '..'), + path: path.resolve(__dirname, `../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + ios: 8, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios.js new file mode 100644 index 00000000000..1791f9cf403 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.ios.js @@ -0,0 +1,169 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); + +const platform = 'ios'; +const pkg = require('../package.json'); +const manifest = require('../dist/ios/vendor-manifest.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +module.exports = { + mode: 'production', + bail: true, + entry: { + index: ['@hippy/rejection-tracking-polyfill', path.resolve(pkg.nativeMain)], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + // CDN path can be configured to load children bundles from remote server + // publicPath: 'https://xxx/hippy/hippyVueNextDemo/', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllReferencePlugin({ + context: path.resolve(__dirname, '..'), + manifest, + }), + new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 8192, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js new file mode 100644 index 00000000000..7fc0ec81035 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.dev.js @@ -0,0 +1,165 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +// const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const { CleanWebpackPlugin } = require('clean-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); + +const pkg = require('../package.json'); +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +const platform = 'web'; +module.exports = { + mode: 'development', + bail: true, + devServer: { + port: 3000, + hot: true, + liveReload: true, + }, + devtool: 'source-map', + entry: { + index: ['regenerator-runtime', path.resolve(pkg.webMain)], + }, + output: { + // filename: `[name].${platform}.js`, + filename: 'index.bundle.js', + path: path.resolve(`./dist/${platform}/`), + strictModuleExceptionHandling: true, + globalObject: '(0, eval)("this")', + }, + plugins: [ + new VueLoaderPlugin(), + new HtmlWebpackPlugin({ + inject: true, + scriptLoading: 'blocking', + template: path.resolve('./public/web-renderer.html'), + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: platform, + }), + // new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file while setting devtool to false + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + new CleanWebpackPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'esbuild-loader', + options: { + target: 'es2015', + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js new file mode 100644 index 00000000000..4e2636dfde5 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/hippy-webpack.web-renderer.js @@ -0,0 +1,166 @@ +const path = require('path'); +const fs = require('fs'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +// const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const pkg = require('../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +const platform = 'web'; +module.exports = { + mode: 'production', + bail: true, + entry: { + index: ['regenerator-runtime', path.resolve(pkg.webMain)], + }, + output: { + filename: '[name].[contenthash:8].js', + path: path.resolve(`./dist/${platform}/`), + }, + plugins: [ + new VueLoaderPlugin(), + new HtmlWebpackPlugin({ + inject: true, + scriptLoading: 'blocking', + template: path.resolve('./public/web-renderer.html'), + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + }, + __PLATFORM__: null, + }), + // new HippyDynamicImportPlugin(), + // LimitChunkCountPlugin can control dynamic import ability + // Using 1 will prevent any additional chunks from being added + // new webpack.optimize.LimitChunkCountPlugin({ + // maxChunks: 1, + // }), + // use SourceMapDevToolPlugin can generate sourcemap file + // new webpack.SourceMapDevToolPlugin({ + // test: /\.(js|jsbundle|css|bundle)($|\?)/i, + // filename: '[file].map', + // }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + limit: true, + // TODO local path not supported on defaultSource/backgroundImage + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/vendor.js b/examples/hippy-vue-next-ssr-demo/scripts/vendor.js new file mode 100644 index 00000000000..41fecfb38d5 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/vendor.js @@ -0,0 +1 @@ +require('@hippy/vue-next'); diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js new file mode 100644 index 00000000000..bfd96dce07b --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.js @@ -0,0 +1,3 @@ +const { getWebpackSsrBaseConfig } = require('./client.base'); + +module.exports = getWebpackSsrBaseConfig('android', 'production'); diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js new file mode 100644 index 00000000000..85e8b860784 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.android.vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const { VueLoaderPlugin } = require('vue-loader'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); + +const platform = 'android'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, '../vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '../..'), + path: path.resolve(__dirname, `../../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js new file mode 100644 index 00000000000..36b6537e19d --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.base.js @@ -0,0 +1,181 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +/** + * get webpack ssr base config + * + * @param platform build platform + * @param env build environment + */ +exports.getWebpackSsrBaseConfig = function (platform, env) { + // do not generate vendor at development + const manifest = require(`../../dist/${platform}/vendor-manifest.json`); + return { + mode: env, + bail: true, + devtool: false, + entry: { + home: [path.resolve(pkg.nativeMain)], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + // CDN path can be configured to load children bundles from remote server + // publicPath: 'https://xxx/hippy/hippyVueNextDemo/', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(env), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new HippyDynamicImportPlugin(), + new WebpackManifestPlugin({ + fileName: `manifest.${platform}.json`, + }), + new webpack.DllReferencePlugin({ + context: path.resolve(__dirname, '../..'), + manifest, + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // do not generate html comment node + comments: false, + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: platform === 'android' ? { + chrome: 57, + } : { + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 1024, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, + }; +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js new file mode 100644 index 00000000000..f465c4ff488 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.dev.js @@ -0,0 +1,195 @@ +const path = require('path'); +const fs = require('fs'); +const HippyDynamicImportPlugin = require('@hippy/hippy-dynamic-import-plugin'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +/** + * webpack ssr client dev config + */ +module.exports = { + mode: 'development', + bail: true, + devtool: 'eval-source-map', + watch: true, + watchOptions: { + // file changed, rebuild delay time + aggregateTimeout: 1000, + }, + devServer: { + remote: { + protocol: 'http', + host: '127.0.0.1', + port: 38989, + }, + // support vue dev tools,default is false + vueDevtools: false, + // not support one debug server debug multiple app + multiple: false, + // ssr do not support hot replacement now + hot: false, + // default is true + liveReload: false, + client: { + // hippy do not support error tips layer + overlay: false, + }, + devMiddleware: { + // write hot replacement file to disk + writeToDisk: true, + }, + }, + entry: { + // client async bundle + home: [path.resolve(pkg.nativeMain)], + // client ssr entry + index: [path.resolve(pkg.ssrMain)], + }, + output: { + filename: '[name].bundle', + path: path.resolve('./dist/dev/'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HOST: JSON.stringify(process.env.DEV_HOST || '127.0.0.1'), + PORT: JSON.stringify(process.env.DEV_PORT || 38989), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new HippyDynamicImportPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // do not generate html comment node + comments: false, + }, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js new file mode 100644 index 00000000000..f710f743a1b --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.entry.js @@ -0,0 +1,97 @@ +const path = require('path'); +const webpack = require('webpack'); + +const pkg = require('../../package.json'); + +module.exports = { + mode: 'production', + devtool: false, + entry: { + index: path.resolve(pkg.ssrMain), + }, + output: { + filename: '[name].js', + strictModuleExceptionHandling: true, + path: path.resolve('./dist'), + globalObject: '(0, eval)("this")', + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __PLATFORM__: null, + }), + ], + module: { + rules: [ + { + test: /\.t|js$/, + use: [{ + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + chrome: 57, + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ['@babel/plugin-proposal-decorators', { legacy: true }], + ['@babel/plugin-transform-runtime', { regenerator: true }], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // comment line when production environment + // entry file do not have image asset + limit: true, + // limit: 8192, + // fallback: 'file-loader', + // name: '[name].[ext]', + // outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.json', '.ts'], + alias: (() => ({ + src: path.resolve('./src'), + }))(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js new file mode 100644 index 00000000000..eec18701059 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.js @@ -0,0 +1,3 @@ +const { getWebpackSsrBaseConfig } = require('./client.base'); + +module.exports = getWebpackSsrBaseConfig('ios', 'production'); diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js new file mode 100644 index 00000000000..6783d5a86ba --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/client.ios.vendor.js @@ -0,0 +1,108 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const { VueLoaderPlugin } = require('vue-loader'); +const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); + +const platform = 'ios'; + +module.exports = { + mode: 'production', + bail: true, + entry: { + vendor: [path.resolve(__dirname, '../vendor.js')], + }, + output: { + filename: `[name].${platform}.js`, + path: path.resolve(`./dist/${platform}/`), + globalObject: '(0, eval)("this")', + library: 'hippyVueBase', + }, + plugins: [ + new webpack.NamedModulesPlugin(), + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + __PLATFORM__: JSON.stringify(platform), + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + new webpack.DllPlugin({ + context: path.resolve(__dirname, '../..'), + path: path.resolve(__dirname, `../../dist/${platform}/[name]-manifest.json`), + name: 'hippyVueBase', + }), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // disable vue3 dom patch flag,because hippy do not support innerHTML + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + }, + }, + }, + ], + }, + { + test: /\.(js)$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: { + ios: 9, + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-class-properties'], + ], + }, + }, + ], + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js new file mode 100644 index 00000000000..e82008654ed --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.dev.js @@ -0,0 +1,186 @@ +const path = require('path'); +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'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +let vueNext = '@hippy/vue-next'; +const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist/index.js'); +if (fs.existsSync(hippyVueNextPath)) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath}`); + vueNext = hippyVueNextPath; +} else { + console.warn('* Using the @hippy/vue-next defined in package.json'); +} +const { isNativeTag } = require(vueNext); + + +module.exports = { + mode: 'development', + bail: true, + devtool: 'source-map', + target: 'node', + watch: true, + watchOptions: { + // file changed, rebuild delay time + aggregateTimeout: 1000, + }, + entry: { + index: path.resolve(pkg.serverEntry), + }, + output: { + filename: 'index.js', + strictModuleExceptionHandling: true, + path: path.resolve('dist/server'), + }, + plugins: [ + // only generate one chunk at server side + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('development'), + HIPPY_SSR: true, + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // because hippy do not support innerHTML, so we should close this feature + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // Vue will recognize non-HTML tags as components, so for Hippy native tags, + // Vue needs to be informed to render them as custom elements + isCustomElement: tag => isNativeTag && isNativeTag(tag), + // real used ssr runtime package, render vue node at server side + ssrRuntimeModuleName: '@hippy/vue-next-server-renderer', + // do not generate html comment node + comments: false, + }, + // real used vue compiler + compiler: compilerSSR, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: '16.0', + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-nullish-coalescing-operator'], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: true, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, + externals: { + express: 'commonjs express', // this line is just to use the express dependency in a commonjs way + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js new file mode 100644 index 00000000000..3ecee4aea93 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack-ssr-config/server.entry.js @@ -0,0 +1,177 @@ +const path = require('path'); +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'); + +let cssLoader = '@hippy/vue-css-loader'; +const hippyVueCssLoaderPath = path.resolve(__dirname, '../../../../packages/hippy-vue-css-loader/dist/css-loader.js'); +if (fs.existsSync(hippyVueCssLoaderPath)) { + console.warn(`* Using the @hippy/vue-css-loader in ${hippyVueCssLoaderPath}`); + cssLoader = hippyVueCssLoaderPath; +} else { + console.warn('* Using the @hippy/vue-css-loader defined in package.json'); +} + +let vueNext = '@hippy/vue-next'; +const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist/index.js'); +if (fs.existsSync(hippyVueNextPath)) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath}`); + vueNext = hippyVueNextPath; +} else { + console.warn('* Using the @hippy/vue-next defined in package.json'); +} +const { isNativeTag } = require(vueNext); + +module.exports = { + mode: 'production', + bail: true, + devtool: false, + target: 'node', + entry: { + index: path.resolve(pkg.serverEntry), + }, + output: { + filename: 'index.js', + strictModuleExceptionHandling: true, + path: path.resolve('dist/server'), + }, + plugins: [ + // only generate one chunk at server side + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify('production'), + HIPPY_SSR: true, + }, + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + }), + new CaseSensitivePathsPlugin(), + new VueLoaderPlugin(), + ], + module: { + rules: [ + { + test: /\.vue$/, + use: [ + { + loader: 'vue-loader', + options: { + compilerOptions: { + // because hippy do not support innerHTML, so we should close this feature + hoistStatic: false, + // whitespace handler, default is 'condense', it can be set 'preserve' + whitespace: 'condense', + // Vue will recognize non-HTML tags as components, so for Hippy native tags, + // Vue needs to be informed to render them as custom elements + isCustomElement: tag => isNativeTag && isNativeTag(tag), + // real used ssr runtime package, render vue node at server side + ssrRuntimeModuleName: '@hippy/vue-next-server-renderer', + // do not generate html comment node + comments: false, + }, + // real used vue compiler + compiler: compilerSSR, + }, + }, + ], + }, + { + test: /\.(le|c)ss$/, + use: [cssLoader, 'less-loader'], + }, + { + test: /\.t|js$/, + use: [ + { + loader: 'babel-loader', + options: { + sourceType: 'unambiguous', + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: '16.0', + }, + }, + ], + ], + plugins: [ + ['@babel/plugin-proposal-nullish-coalescing-operator'], + ], + }, + }, + ], + }, + { + test: /\.(png|jpe?g|gif)$/i, + use: [{ + loader: 'url-loader', + options: { + // if you would like to use base64 for picture, uncomment limit: true + // limit: true, + limit: 8192, + fallback: 'file-loader', + name: '[name].[ext]', + outputPath: 'assets/', + }, + }], + }, + { + test: /\.(ts)$/, + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + }, + }, + ], + exclude: /node_modules/, + }, + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto', + }, + ], + }, + resolve: { + extensions: ['.js', '.vue', '.json', '.ts'], + alias: (() => { + const aliases = { + src: path.resolve('./src'), + }; + + // If @vue/runtime-core was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueRuntimeCorePath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/node_modules/@vue/runtime-core'); + if (fs.existsSync(path.resolve(hippyVueRuntimeCorePath, 'index.js'))) { + console.warn(`* Using the @vue/runtime-core in ${hippyVueRuntimeCorePath} as vue alias`); + aliases['@vue/runtime-core'] = hippyVueRuntimeCorePath; + } else { + console.warn('* Using the @vue/runtime-core defined in package.json'); + } + + // If @hippy/vue-next was built exist in packages directory then make an alias + // Remove the section if you don't use it + const hippyVueNextPath = path.resolve(__dirname, '../../../../packages/hippy-vue-next/dist'); + if (fs.existsSync(path.resolve(hippyVueNextPath, 'index.js'))) { + console.warn(`* Using the @hippy/vue-next in ${hippyVueNextPath} as @hippy/vue-next alias`); + aliases['@hippy/vue-next'] = hippyVueNextPath; + } else { + console.warn('* Using the @hippy/vue-next defined in package.json'); + } + + return aliases; + })(), + }, +}; diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js new file mode 100644 index 00000000000..fe0210af821 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.build.js @@ -0,0 +1,109 @@ +/** + * build js script for ssr production + */ +const { arch } = require('os'); +const { exec, rm, cp } = require('shelljs'); + +let envPrefixStr = 'cross-env-os os="Windows_NT,Linux,Darwin" minVersion=17 NODE_OPTIONS=--openssl-legacy-provider'; +const isArmCpu = arch() + .toLowerCase() + .includes('arm'); +if (isArmCpu) { + envPrefixStr = ''; +} + +/** + * get executed script + * + * @param configFile - config file name + */ +function getScriptCommand(configFile) { + return `${envPrefixStr} webpack --config scripts/webpack-ssr-config/${configFile} --mode production`; +} + +/** + * execute script + * + * @param scriptStr - script content + * @param options - shelljs options + */ +function runScript(scriptStr, options = { silent: false }) { + const result = exec(scriptStr, options); + if (result.code !== 0) { + console.error(`❌ execute cmd - "${scriptStr}" error: ${result.stderr}`); + process.exit(1); + } +} + +/** + * build ssr client entry bundle + */ +function buildServerEntry() { + // build server entry + runScript(getScriptCommand('server.entry.js')); +} + +/** + * build ssr sever and client bundle + */ +function buildJsBundle() { + // build Android client bundle + runScript(getScriptCommand('client.android.js')); + // build iOS client bundle + runScript(getScriptCommand('client.ios.js')); + // 3. build client entry + runScript(getScriptCommand('client.entry.js')); +} + +/** + * build js vendor for production + */ +function buildJsVendor() { + // ios + runScript(getScriptCommand('client.ios.vendor.js')); + // android + runScript(getScriptCommand('client.android.vendor.js')); +} + +/** + * generate client entry js bundle for production + */ +function generateClientEntryForProduction() { + // copy js entry to every platform + // ios + cp('-f', './dist/index.js', './dist/ios/index.ios.js'); + // android + cp('-f', './dist/index.js', './dist/android/index.android.js'); +} + +/** + * copy generated files to native demo + */ +function copyFilesToNativeDemo() { + cp('-Rf', './dist/ios/*', '../ios-demo/res/'); // Update the ios demo project + cp('-Rf', './dist/android/*', '../android-demo/res/'); // # Update the android project +} + +/** + * build production bundle + */ +function buildProduction() { + // production, build all entry bundle, ssr server should execute by user + // first, remove dist directory + rm('-rf', './dist'); + // second, build js vendor + buildJsVendor(); + // third, build all js bundle + buildJsBundle(); + // fourth, build client entry + buildServerEntry(); + // fifth, build every platform's client entry + generateClientEntryForProduction(); + // last, copy all files to native demo + copyFilesToNativeDemo(); +} + +// build production bundle +buildProduction(); + + diff --git a/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js b/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js new file mode 100644 index 00000000000..4c225478b6f --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/scripts/webpack.ssr.dev.js @@ -0,0 +1,39 @@ +/** + * build script for ssr + */ + +const webpack = require('webpack'); +const { exec } = require('shelljs'); +const serverConfig = require('./webpack-ssr-config/server.dev'); + +const compiler = webpack(serverConfig); +let childProcess = null; + +/** + * execute script + * + * @param scriptStr - script content + * @param options - shelljs options + */ +function runScript(scriptStr, options) { + if (childProcess) { + // kill process first + childProcess.kill(); + } + childProcess = exec(scriptStr, options, (code, stdout, stderr) => { + if (code) { + console.error(`❌ execute cmd - "${scriptStr}" error: ${stderr}`); + process.exit(1); + } + }); +} + +compiler.hooks.done.tap('DonePlugin', () => { + // restart node process after build success + setTimeout(() => { + runScript('node ./dist/server/index.js', { async: true, silent: false }); + }, 0); +}); + +// watch server entry change +compiler.watch({}, () => {}); diff --git a/examples/hippy-vue-next-ssr-demo/server.ts b/examples/hippy-vue-next-ssr-demo/server.ts new file mode 100644 index 00000000000..db1660b26f5 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/server.ts @@ -0,0 +1,80 @@ +import express from 'express'; +import { render, HIPPY_GLOBAL_STYLE_NAME } from 'src/main-server'; + +interface MinifiedStyleDeclaration { + [key: number]: number | string; +} + +/** + * minify css content + */ +function minifyStyleContent(rawStyleContent): NeedToTyped[] | MinifiedStyleDeclaration[] { + if (rawStyleContent?.length && Array.isArray(rawStyleContent)) { + const minifiedStyle: MinifiedStyleDeclaration[] = []; + rawStyleContent.forEach((styleContent) => { + // minified style is array, 0 index is selectors, 1 index is declaration, no hash + minifiedStyle.push([ + styleContent.selectors, + // minify declarations + styleContent.declarations.map(declaration => [declaration.property, declaration.value]), + ]); + }); + return minifiedStyle; + } + + return rawStyleContent; +} + +/** + * get ssr style content + * + * @param globalStyleName - hippy global style name + */ +function getSsrStyleContent(globalStyleName): NeedToTyped[] { + if (global.ssrStyleContentList) { + return global.ssrStyleContentList; + } + // cache global style sheet, then non first request could return directly, unnecessary to + // serialize again + global.ssrStyleContentList = JSON.stringify(minifyStyleContent(global[globalStyleName])); + + return global.ssrStyleContentList; +} + +// server listen port +const serverPort = 8080; +// init http server +const server = express(); +// use json middleware +server.use(express.json()); + +// listen request +server.all('/getSsrFirstScreenData', (req, rsp) => { + // get hippy ssr node list and other const + render('/', { + appName: 'Demo', + }, req.body).then(({ + list, + store, + uniqueId, + }) => { + // send response + rsp.json({ + code: 0, + data: list, + store: store.state.value, + uniqueId, + styleContent: getSsrStyleContent(HIPPY_GLOBAL_STYLE_NAME), + }); + }) + .catch((error) => { + rsp.json({ + code: -1, + message: `get ssr data error: ${JSON.stringify(error)}`, + }); + }); +}); + +// start server +server.listen(serverPort); +console.log(`Server listen on:${serverPort}`); diff --git a/examples/hippy-vue-next-ssr-demo/src/app.vue b/examples/hippy-vue-next-ssr-demo/src/app.vue new file mode 100644 index 00000000000..060a382da36 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/src/app.vue @@ -0,0 +1,260 @@ + + + diff --git a/examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg b/examples/hippy-vue-next-ssr-demo/src/assets/defaultSource.jpg new file mode 100644 index 0000000000000000000000000000000000000000..833417ea2fb9732e462397b44094599e2b96a56d GIT binary patch literal 42281 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 ZIcDMS&LgEgX}y2tW=580o*THu{XgQR4!HmT literal 0 HcmV?d00001 diff --git a/examples/hippy-vue-next-ssr-demo/src/assets/logo.png b/examples/hippy-vue-next-ssr-demo/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 literal 0 HcmV?d00001 diff --git a/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue new file mode 100644 index 00000000000..00c06a74eb8 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-button.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue new file mode 100644 index 00000000000..1a5de698964 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-div.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue new file mode 100644 index 00000000000..1b231d3702e --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-dynamicimport.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue new file mode 100644 index 00000000000..ffdb56d0167 --- /dev/null +++ b/examples/hippy-vue-next-ssr-demo/src/components/demo/demo-iframe.vue @@ -0,0 +1,121 @@ +

+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