import { defineConfig } from 'vite'; import solidPlugin from 'vite-plugin-solid'; import { builtinModules } from 'node:module'; import { getBuildBanner } from './automation/build/buildBanner'; import { viteStaticCopy } from 'vite-plugin-static-copy'; import banner from 'vite-plugin-banner'; import manifest from './manifest.json' with { type: 'json' }; import path from 'path'; const entryFile = 'src/main.ts'; export default defineConfig(({ mode }) => { const prod = mode === 'production'; const outDir = prod ? 'dist/' : `exampleVault/.obsidian/plugins/${manifest.id}`; const plugins = [ solidPlugin(), banner({ outDir: outDir, content: getBuildBanner(prod ? 'Release Build' : 'Dev Build', version => version), }), viteStaticCopy({ targets: [ { src: 'manifest.json', dest: outDir, }, ], }), ]; return { plugins, resolve: { alias: { src: path.resolve(__dirname, './src'), }, }, build: { lib: { entry: path.resolve(__dirname, entryFile), name: 'main', fileName: () => 'main.js', formats: ['cjs'], }, minify: prod, sourcemap: prod ? false : 'inline', cssCodeSplit: false, emptyOutDir: false, outDir: '', rollupOptions: { input: { main: path.resolve(__dirname, entryFile), }, output: { dir: outDir, entryFileNames: 'main.js', assetFileNames: 'styles.css', }, external: [ 'obsidian', 'electron', '@codemirror/autocomplete', '@codemirror/collab', '@codemirror/commands', '@codemirror/language', '@codemirror/lint', '@codemirror/search', '@codemirror/state', '@codemirror/view', '@lezer/common', '@lezer/highlight', '@lezer/lr', ...builtinModules, ], }, }, }; });