Fresh 中如何正确使用 Vue 组件进行服务端渲染?
我在 Fresh 项目里尝试引入 Vue 组件做 SSR,但页面直接报错说 Vue 未定义。明明在客户端能跑,服务端就挂了,是不是 Fresh 不支持 Vue 啊?
我试过把 Vue 的 script 标签加到 _app.tsx 的 head 里,也试过动态 import,都不行。下面是我写的简单组件:
<template>
<div>Hello {{ name }}</div>
</template>
<script>
export default {
data() {
return { name: 'Fresh + Vue' }
}
}
</script>
有没有人成功在 Fresh 里跑过 Vue 的 SSR?求指点!
Fresh 本身就是为 Preact 设计的,整个 islands 架构、模板系统、运行时都是绑着 Preact 走的。你看到的那个“未定义”错误不是配置问题,是 Fresh 压根就没打算让你在服务端跑 Vue。
想在服务端渲染 Vue?两条路:
一是放弃 Fresh,换 Nuxt 3。Nuxt 对 Vue SSR 支持很完善,deno 也能跑。
二是如果你就喜欢 Deno + Fresh 那套东西,老老实实用 Preact。Fresh 的定位就是轻量级 Preact 框架,官方示例也全是 Preact。
你那个组件写法是 Vue 单文件组件格式,Fresh 根本解析不了这个。如果只是想在客户端用 Vue,那和 Fresh 的 SSR 理念也冲突了——Fresh 的卖点就是 island 架构,服务端只输出 HTML,客户端按需 hydrate,你整个 Vue 上去意义也不大。
结论:框架选错了。Vue SSR 找 Nuxt,Fresh 找 Preact。