Files
libnovel/ui/vite.config.ts
Admin f9a4a0e416
Some checks failed
CI / Backend (push) Failing after 11s
CI / UI (push) Successful in 45s
Release / Test backend (push) Successful in 53s
Release / Check ui (push) Successful in 1m3s
Release / Docker / caddy (push) Successful in 55s
CI / Backend (pull_request) Successful in 48s
Release / Docker / backend (push) Failing after 11s
Release / Docker / runner (push) Failing after 11s
CI / UI (pull_request) Successful in 50s
Release / Docker / ui (push) Successful in 2m20s
Release / Gitea Release (push) Has been skipped
fix: remove paraglideVitePlugin from vite.config — root cause of 500 errors
The paraglideVitePlugin runs at build time (buildStart hook) and fetches
the inlang plugin from cdn.jsdelivr.net to recompile messages. This:
  1. Overwrites messages.js with 'export * as m from ...' unconditionally
  2. Causes Rollup SSR tree-shaking to replace all m.*() calls with (void 0)
  3. Crashes every page server-side with 'TypeError: (void 0) is not a function'

The plugin is no longer needed: compiled paraglide output is committed to
git and updated via 'npm run paraglide' when messages change. Removing the
plugin lets Vite treat messages.js as a plain static module, keeping all
exports intact through the SSR bundle.
2026-03-30 23:15:27 +05:00

33 lines
1.1 KiB
TypeScript

import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
// Source maps are always generated so that the CI pipeline can upload them to
// GlitchTip via glitchtip-cli after a release build.
//
// Note: paraglideVitePlugin is intentionally removed. It fetches an inlang
// plugin from CDN at build time, which (a) fails in offline CI and (b)
// regenerates messages.js with `export * as m` causing Rollup to tree-shake
// all message imports into (void 0). Compiled paraglide output is committed to
// git and updated manually via `npm run paraglide`.
export default defineConfig({
build: {
sourcemap: true
},
plugins: [
tailwindcss(),
sveltekit()
],
ssr: {
// Force these packages to be bundled into the server output rather than
// treated as external requires. The production Docker image has no
// node_modules, so anything used in server-side code must be inlined.
noExternal: ['marked'],
// cropperjs is DOM-only (used inside $effect); exclude from SSR bundle.
external: ['cropperjs']
},
optimizeDeps: {
include: ['cropperjs']
}
});