Skip to content

Commit

Permalink
Create fake client components for SSR
Browse files Browse the repository at this point in the history
  • Loading branch information
jlpereira committed Apr 25, 2023
1 parent 757976f commit 2d07cd7
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/entry-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,16 @@ import { createApp } from './main'
import { registerGlobalComponents } from '@/components/globalComponents'
import { getActiveHead } from 'unhead'
import { renderSSRHead } from '@unhead/ssr'
import { registerFakeClientComponents } from '@/ssr/utils/registerFakeClientComponents'
import devalue from '@nuxt/devalue'

export async function render(url, manifest) {
const { app, router, store } = createApp()

// Register global components, create a fake server components for components that should only render on client side
registerGlobalComponents(app)
registerFakeClientComponents(app)

// set the router to the desired URL before rendering
await router.push(url)
await router.isReady()
Expand Down
18 changes: 18 additions & 0 deletions src/ssr/utils/registerFakeClientComponents.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { defineComponent } from 'vue'
import glob from 'glob'

export function registerFakeClientComponents(app) {
const filePaths = glob.sync('src/components/**/*.client.vue')
const vueComponent = defineComponent({
template: '<div></div>'
})

filePaths.forEach((path) => {
const componentName = path
.split('/')
.pop()
.replace(/\.client.\w+$/, '')

app.component(componentName, vueComponent)
})
}

0 comments on commit 2d07cd7

Please sign in to comment.