这里提供了一个简单的 Vue2、Vue3 支持,如果它满足不了你的需求,你可以自己实现,这里有源码参考。
自定义实现,需要基于 @gez/rspack 来实现,Vue 相关的配置,可以在这里了解。
完整的例子, 点击这里
npm install @gez/rspack-vue vue@2.7.16 vue-tsc vue-server-renderer@2.7.16 -D
import type { GezOptions } from '@gez/core';
export default {
// ...... 省略若干配置
async createDevApp(gez) {
return import('@gez/rspack-vue').then((m) => m.createVue2App(gez));
}
} satisfies GezOptions;
import type { RenderContext } from '@gez/core';
import { createRenderer } from 'vue-server-renderer';
import { createApp } from './create-app';
const renderer = createRenderer();
export default async (rc: RenderContext) => {
const script = await rc.script();
const { app } = createApp();
const vueCtx = {
renderStyles: () => ''
};
const html = await renderer.renderToString(app, vueCtx);
rc.html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gez</title>
${vueCtx.renderStyles()}
</head>
<body>
${html}
${script}
</body>
</html>
`;
};
内部系统,还在大量使用 Vue2,未来 5 年还好持续维护。
完整的例子, 点击这里
npm install @gez/rspack-vue vue -D
import type { GezOptions } from '@gez/core';
export default {
// ...... 省略若干配置
async createDevApp(gez) {
return import('@gez/rspack-vue').then((m) => m.createVue3App(gez));
}
} satisfies GezOptions;
import type { RenderContext } from '@gez/core';
import { renderToString } from 'vue/server-renderer';
import { createApp } from './create-app';
export default async (rc: RenderContext) => {
const { app } = createApp('server');
const script = await rc.script();
const body = await renderToString(app, {});
rc.html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gez</title>
</head>
<body>
${body}
${script}
</body>
</html>
`;
};
例子不够完整,欢迎提交 PR 补充完整例子。