rspace-online/vite.config.ts

142 lines
3.3 KiB
TypeScript

import { resolve } from "node:path";
import { defineConfig } from "vite";
import wasm from "vite-plugin-wasm";
export default defineConfig({
root: "website",
plugins: [
wasm(),
// Build service worker as a separate, unhashed JS file
{
name: "build-sw",
apply: "build",
closeBundle: {
sequential: true,
async handler() {
const { build } = await import("vite");
await build({
configFile: false,
root: resolve(__dirname, "website"),
build: {
emptyOutDir: false,
outDir: resolve(__dirname, "dist"),
lib: {
entry: resolve(__dirname, "website/sw.ts"),
formats: ["es"],
fileName: () => "sw.js",
},
rollupOptions: {
output: {
entryFileNames: "sw.js",
},
},
},
});
// Build shell.ts as a standalone JS bundle
await build({
configFile: false,
root: resolve(__dirname, "website"),
resolve: {
alias: {
"@lib": resolve(__dirname, "./lib"),
"@shared": resolve(__dirname, "./shared"),
},
},
build: {
emptyOutDir: false,
outDir: resolve(__dirname, "dist"),
lib: {
entry: resolve(__dirname, "website/shell.ts"),
formats: ["es"],
fileName: () => "shell.js",
},
rollupOptions: {
output: {
entryFileNames: "shell.js",
},
},
},
});
// Build books module components
await build({
configFile: false,
root: resolve(__dirname, "modules/books/components"),
build: {
emptyOutDir: false,
outDir: resolve(__dirname, "dist/modules/books"),
lib: {
entry: resolve(__dirname, "modules/books/components/folk-book-shelf.ts"),
formats: ["es"],
fileName: () => "folk-book-shelf.js",
},
rollupOptions: {
output: {
entryFileNames: "folk-book-shelf.js",
},
},
},
});
await build({
configFile: false,
root: resolve(__dirname, "modules/books/components"),
build: {
emptyOutDir: false,
outDir: resolve(__dirname, "dist/modules/books"),
lib: {
entry: resolve(__dirname, "modules/books/components/folk-book-reader.ts"),
formats: ["es"],
fileName: () => "folk-book-reader.js",
},
rollupOptions: {
output: {
entryFileNames: "folk-book-reader.js",
},
},
},
});
// Copy books CSS
const { copyFileSync, mkdirSync } = await import("node:fs");
mkdirSync(resolve(__dirname, "dist/modules/books"), { recursive: true });
copyFileSync(
resolve(__dirname, "modules/books/components/books.css"),
resolve(__dirname, "dist/modules/books/books.css"),
);
},
},
},
],
resolve: {
alias: {
"@lib": resolve(__dirname, "./lib"),
"@encryptid": resolve(__dirname, "./src/encryptid"),
"@shared": resolve(__dirname, "./shared"),
},
},
build: {
target: "esnext",
rollupOptions: {
input: {
index: resolve(__dirname, "./website/index.html"),
canvas: resolve(__dirname, "./website/canvas.html"),
},
},
modulePreload: {
polyfill: false,
},
outDir: "../dist",
emptyOutDir: true,
// Copy shell.css to dist
cssCodeSplit: false,
},
server: {
port: 5173,
},
optimizeDeps: {
exclude: ["@automerge/automerge"],
},
});