diff --git a/package.json b/package.json index 442185c..cadac96 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "npm run build:spa && npm run build:ssg", "build:spa": "tsc && vite build", "build:ssg": "tsc && SSG=true node --loader ts-node/esm ./src/vite-server.ts", + "build:ssr": "tsc && vite build -c vite.config.ssr.ts", "preview": "vite preview" }, "dependencies": { diff --git a/vite.config.ssr.ts b/vite.config.ssr.ts new file mode 100644 index 0000000..8bf4edf --- /dev/null +++ b/vite.config.ssr.ts @@ -0,0 +1,41 @@ +import { defineConfig } from "vite"; +import path from "node:path"; +import react from "@vitejs/plugin-react"; +import pj from "./package.json"; + +process.env.NODE_ENV = "production"; + +// https://vitejs.dev/config/ +export default defineConfig({ + ssr: { + noExternal: Object.keys(pj.dependencies || {}).concat( + Object.keys(pj.devDependencies || {}) + ), + }, + resolve: { + alias: [ + { + find: /^~/, + replacement: path.resolve(__dirname, "src"), + }, + ], + extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"], + }, + build: { + ssr: true, + minify: false, + rollupOptions: { + preserveEntrySignatures: "strict", + input: { server: "src/entry-server.tsx" }, + output: { + dir: ".stormkit/server", + format: "esm", + entryFileNames: "[name].mjs", + preserveModules: true, + preserveModulesRoot: "src", + exports: "named", + }, + }, + }, + plugins: [react()], +});