vite.config.js (74 lines of code) (raw):

import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import Inspect from 'vite-plugin-inspect' import path from "path"; import autoprefixer from "autoprefixer"; import { viteStaticCopy } from 'vite-plugin-static-copy'; import replace from '@rollup/plugin-replace'; import { testHarness } from "./scripts/testHarness.js"; import { prerender } from "./scripts/prerender.js"; import preact from "@preact/preset-vite"; const assetsPath = process.env.ATOM_ASSETS_PATH || ""; // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { return { resolve: { alias: { '$lib': path.resolve(__dirname, "src/lib"), '$assets': path.resolve(__dirname, "src/assets"), }, }, esbuild: { // remove console.log and debugger statements from production builds drop: ["debugger"], pure: ["console.log", "console.error", "console.warn", "console.debug", "console.trace"], }, css: { postcss: { plugins: [autoprefixer()], }, devSourcemap: true, }, plugins: [ replace({ values: { __assetsPath__: assetsPath, }, preventAssignment: true, }), svelte({ configFile: path.resolve(__dirname, "svelte.config.js"), }), preact(), testHarness(), // generate prerendered HTML // NOTE: Only works when you don't reference 'document' or 'window' in Svelte components. // If you really need to use either of those, disable prerendering here. prerender(), viteStaticCopy({ targets: [ { src: path.resolve(__dirname, 'src/assets/**/*'), dest: path.resolve(__dirname, `build/assets`) } ] }), Inspect(), ], root: path.resolve(__dirname, "src/atoms"), publicDir: path.resolve(__dirname, "src/assets"), build: { copyPublicDir: false, sourcemap: true, target: "es2015", emptyOutDir: true, cssCodeSplit: false, rollupOptions: { input: path.resolve(__dirname, `src/atoms/${mode}/app.js`), output: { dir: path.resolve(__dirname, `build/${mode}`), entryFileNames: "[name].js", assetFileNames: "style.[ext]", format: 'iife', }, }, }, ssr: { // Dependences are not run through Vite's transform module by default. // In some cases, you might want to uncomment this setting, e.g. when // you want a React module to work with preact/compat aliasing. // noExternal: true, } }; });