diff --git a/lib/closePlugin.ts b/lib/closePlugin.ts new file mode 100644 index 00000000..fe864ae2 --- /dev/null +++ b/lib/closePlugin.ts @@ -0,0 +1,25 @@ +// ref: https://stackoverflow.com/a/76920975 +import type { Plugin } from 'vite'; + +export default function ClosePlugin(): Plugin { + return { + name: 'ClosePlugin', // required, will show up in warnings and errors + + // use this to catch errors when building + buildEnd(error) { + if(error) { + console.error('Error bundling') + console.error(error) + process.exit(1) + } else { + console.log('Build ended') + } + }, + + // use this to catch the end of a build without errors + closeBundle() { + console.log('Bundle closed') + process.exit(0) + }, + } +} diff --git a/vite.config.ts b/vite.config.ts index 85657276..51bc6f77 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { join, resolve } from 'path'; import { updateManifestPlugin } from './lib/patchPackage'; import { base64Loader } from './lib/base64loader'; import type { BuildTarget } from './lib/types'; +import ClosePlugin from './lib/closePlugin'; import react from '@vitejs/plugin-react'; import million from "million/compiler"; @@ -25,7 +26,7 @@ const targets: BuildTarget[] = [ const mode = process.env.MODE || 'chrome'; -export default defineConfig({ +export default defineConfig(({ command }) => ({ plugins: [ base64Loader, react(), @@ -38,7 +39,8 @@ export default defineConfig({ manifest: targets.find(t => t.browser === mode.toLowerCase())?.manifest ?? chrome.manifest, browser: mode.toLowerCase() === "firefox" ? "firefox" : "chrome" }), - updateManifestPlugin() + updateManifestPlugin(), + ...(command === 'build' ? [ClosePlugin()] : []) ], root: resolve(__dirname, './src'), resolve: { @@ -78,4 +80,4 @@ export default defineConfig({ } } } -}); \ No newline at end of file +})); \ No newline at end of file