-
-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathvite.config.js
More file actions
87 lines (79 loc) · 2.66 KB
/
vite.config.js
File metadata and controls
87 lines (79 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { defineConfig } from 'vite'
import { imba } from 'vite-plugin-imba'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
import { webExtensionPlugin } from './scripts/bundle/webextension-plugin.js'
const __filename = fileURLToPath(import.meta.url)
export const __dirname = dirname(__filename)
export default defineConfig(({ command, mode }) => {
const isDev = mode === 'development'
const browser = process.env.BROWSER || 'chrome'
const buildType = process.env.BUILD_TYPE || 'all'
console.log(`\n🚀 Building ${buildType} for ${isDev ? 'development' : 'production'} mode for ${browser}\n`)
// Determine if we are in watch mode
const isWatch = process.env.VITE_WATCH === 'true'
// Common basic configuration
const baseConfig = {
plugins: [imba()],
build: {
outDir: 'dist',
emptyOutDir: buildType === 'background' && !isWatch, // Ne jamais vider en watch
sourcemap: false,
minify: !isDev && browser !== "firefox",
},
resolve: {
extensions: ['.imba', '.js', '.json']
},
optimizeDeps: {
include: ['webextension-polyfill']
}
}
// Build for background and content scripts (IIFE, without bundled packages for Chrome compatibility)
if (buildType === 'background' || buildType === 'content') {
return {
...baseConfig,
plugins: [...baseConfig.plugins, webExtensionPlugin(browser, buildType)],
build: {
...baseConfig.build,
rollupOptions: {
input: {
[buildType]: resolve(__dirname, `src/${buildType}/${buildType}.imba`)
},
output: {
format: 'iife', // IIFE fonctionne avec une seule entrée
entryFileNames: '[name].js',
// No globals
},
// DO NOT outsource packages
}
}
}
}
// ES Build for UI (popup, options)
return {
...baseConfig,
plugins: [...baseConfig.plugins, webExtensionPlugin(browser, 'ui')],
build: {
...baseConfig.build,
rollupOptions: {
input: {
// popup: resolve(__dirname, 'src/popup/popup.html'),
options: resolve(__dirname, 'src/options/options.html')
},
output: {
format: 'es', // ES module for UI (supported by modern extensions)
inlineDynamicImports: false,
entryFileNames: 'assets/[name].js',
chunkFileNames: 'assets/chunks/[name].[hash].js',
assetFileNames: (assetInfo) => {
const name = assetInfo.name || ''
if (name.endsWith('.html')) {
return '[name][extname]'
}
return 'assets/[name][extname]'
}
}
}
}
}
})