# 使用 SolidJS 进行 SSR > 在 Nitro 中使用 Vite 进行 SolidJS 服务端渲染。 ```json [package.json] { "type": "module", "scripts": { "build": "vite build", "dev": "vite dev" }, "devDependencies": { "nitro": "latest", "solid-js": "^1.9.11", "vite": "beta", "vite-plugin-solid": "^2.11.10" } } ``` ```json [tsconfig.json] { "extends": "nitro/tsconfig", "compilerOptions": { "jsx": "preserve", "jsxImportSource": "solid-js" } } ``` ```js [vite.config.mjs] import solid from "vite-plugin-solid"; import { defineConfig } from "vite"; import { nitro } from "nitro/vite"; export default defineConfig({ plugins: [solid({ ssr: true }), nitro()], esbuild: { jsx: "preserve", jsxImportSource: "solid-js" }, environments: { ssr: { build: { rollupOptions: { input: "./src/entry-server.tsx" } }, }, client: { build: { rollupOptions: { input: "./src/entry-client.tsx" } }, }, }, }); ``` ```tsx [src/app.tsx] import { createSignal } from "solid-js"; export function App() { const [count, setCount] = createSignal(0); return (

Hello, Solid!

); } ``` ```tsx [src/entry-client.tsx] import { hydrate } from "solid-js/web"; import "./styles.css"; import { App } from "./app.jsx"; hydrate(() => , document.querySelector("#app")!); ``` ```tsx [src/entry-server.tsx] import { renderToStringAsync, HydrationScript } from "solid-js/web"; import { App } from "./app.jsx"; import clientAssets from "./entry-client?assets=client"; import serverAssets from "./entry-server?assets=ssr"; export default { async fetch(req: Request): Promise { const appHTML = await renderToStringAsync(() => ); const rootHTML = await renderToStringAsync(() => ); return new Response(rootHTML, { headers: { "Content-Type": "text/html" }, }); }, }; function Root(props: { appHTML?: string }) { const assets = clientAssets.merge(serverAssets); return ( {assets.css.map((attr: any) => ( ))} {assets.js.map((attr: any) => ( ))}