From 2067ea275812fee0a36e38c601be1c1fdebf704e Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Fri, 10 Mar 2017 10:51:47 +0000 Subject: [PATCH] Add server-side rendering (via bundleRenderer, as this is what the Vue docs recommend, and apparently the only way it does encapsulation) --- templates/VueSpa/ClientApp/boot-client.ts | 13 ++--- .../VueSpa/ClientApp/boot-server-bundle.ts | 16 ++++++ templates/VueSpa/ClientApp/boot-server.ts | 18 ++++++ .../ClientApp/components/app/app.vue.html | 3 +- .../navmenu/navmenu.css} | 0 .../components/navmenu/navmenu.vue.html | 2 + templates/VueSpa/ClientApp/router.ts | 13 ----- templates/VueSpa/ClientApp/routes.ts | 5 ++ templates/VueSpa/Views/Home/Index.cshtml | 6 +- templates/VueSpa/Views/Shared/_Layout.cshtml | 3 - templates/VueSpa/package.json | 6 +- templates/VueSpa/tsconfig.json | 3 +- templates/VueSpa/webpack.config.js | 56 +++++++++++++++---- templates/VueSpa/webpack.config.vendor.js | 24 ++++---- 14 files changed, 117 insertions(+), 51 deletions(-) create mode 100644 templates/VueSpa/ClientApp/boot-server-bundle.ts create mode 100644 templates/VueSpa/ClientApp/boot-server.ts rename templates/VueSpa/ClientApp/{css/site.css => components/navmenu/navmenu.css} (100%) delete mode 100644 templates/VueSpa/ClientApp/router.ts create mode 100644 templates/VueSpa/ClientApp/routes.ts diff --git a/templates/VueSpa/ClientApp/boot-client.ts b/templates/VueSpa/ClientApp/boot-client.ts index b86ea2a..aa5e0a8 100644 --- a/templates/VueSpa/ClientApp/boot-client.ts +++ b/templates/VueSpa/ClientApp/boot-client.ts @@ -1,11 +1,10 @@ -import './css/site.css'; import Vue from 'vue'; -import router from './router'; - -const App = require('./components/app/app.vue.html'); +import VueRouter from 'vue-router'; +import { routes } from './routes'; +Vue.use(VueRouter); new Vue({ - el: 'app', - render: h => h(App, { props: {} }), - router: router + el: '#app-root', + router: new VueRouter({ mode: 'history', routes: routes }), + render: h => h(require('./components/app/app.vue.html')) }); diff --git a/templates/VueSpa/ClientApp/boot-server-bundle.ts b/templates/VueSpa/ClientApp/boot-server-bundle.ts new file mode 100644 index 0000000..ad2a7cb --- /dev/null +++ b/templates/VueSpa/ClientApp/boot-server-bundle.ts @@ -0,0 +1,16 @@ +import Vue from 'vue'; +import VueRouter from 'vue-router'; +import { createServerRenderer, RenderResult } from 'aspnet-prerendering'; +import { createBundleRenderer } from 'vue-server-renderer'; +import { routes } from './routes'; +Vue.use(VueRouter); + +export default function(context: any) { + const router = new VueRouter({ mode: 'history', routes: routes }) + router.push(context.url); + + return new Vue({ + render: h => h(require('./components/app/app.vue.html')), + router: router + }); +} diff --git a/templates/VueSpa/ClientApp/boot-server.ts b/templates/VueSpa/ClientApp/boot-server.ts new file mode 100644 index 0000000..bbe4e4c --- /dev/null +++ b/templates/VueSpa/ClientApp/boot-server.ts @@ -0,0 +1,18 @@ +import { createServerRenderer, RenderResult } from 'aspnet-prerendering'; +import { createBundleRenderer } from 'vue-server-renderer'; +const path = require('path'); +const bundleRenderer = createBundleRenderer(path.resolve('ClientApp/dist/vue-ssr-bundle.json'), { + template: '' +}); + +export default createServerRenderer(params => { + return new Promise((resolve, reject) => { + bundleRenderer.renderToString(params, (error, html) => { + if (error) { + reject(error); + } else { + resolve({ html: html }); + } + }); + }); +}); diff --git a/templates/VueSpa/ClientApp/components/app/app.vue.html b/templates/VueSpa/ClientApp/components/app/app.vue.html index 65a2ff9..6a108b8 100644 --- a/templates/VueSpa/ClientApp/components/app/app.vue.html +++ b/templates/VueSpa/ClientApp/components/app/app.vue.html @@ -1,5 +1,5 @@ diff --git a/templates/VueSpa/ClientApp/css/site.css b/templates/VueSpa/ClientApp/components/navmenu/navmenu.css similarity index 100% rename from templates/VueSpa/ClientApp/css/site.css rename to templates/VueSpa/ClientApp/components/navmenu/navmenu.css diff --git a/templates/VueSpa/ClientApp/components/navmenu/navmenu.vue.html b/templates/VueSpa/ClientApp/components/navmenu/navmenu.vue.html index 33a6e50..642a522 100644 --- a/templates/VueSpa/ClientApp/components/navmenu/navmenu.vue.html +++ b/templates/VueSpa/ClientApp/components/navmenu/navmenu.vue.html @@ -33,3 +33,5 @@ + +