-
Notifications
You must be signed in to change notification settings - Fork 2
/
vite.config.ts
128 lines (122 loc) · 3.74 KB
/
vite.config.ts
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { writeFileSync } from 'node:fs';
import { fileURLToPath, URL } from 'node:url';
import { defineConfig, type UserConfig } from 'vite';
import { visualizer } from 'rollup-plugin-visualizer';
import banner from 'vite-plugin-banner';
import { checker } from 'vite-plugin-checker';
import dts from 'vite-plugin-dts';
import pkg from './package.json';
// Export vite config
export default defineConfig(({ command, mode }): UserConfig => {
// Hook production build.
// https://vitejs.dev/config/
const config: UserConfig = {
base: './',
plugins: [
// vite-plugin-checker
// https://github.com/fi3ework/vite-plugin-checker
checker({
typescript: true,
vueTsc: false,
// eslint: { lintCommand: 'eslint' },
}),
// vite-plugin-banner
// https://github.com/chengpeiquan/vite-plugin-banner
banner(`/**
* ${pkg.name}
*
* @description ${pkg.description}
* @author ${pkg.author.name} <${pkg.author.email}>
* @copyright 2019-${new Date().getFullYear()} By Masashi Yoshikawa All rights reserved.
* @license ${pkg.license}
* @version ${pkg.version}
* @see {@link ${pkg.homepage}}
*/
`),
// vite-plugin-dts
// https://github.com/qmhc/vite-plugin-dts
mode === 'docs' ? undefined : dts(),
],
// https://vitejs.dev/config/shared-options.html#publicdir
publicDir: mode === 'docs' || command === 'serve' ? 'public' : false,
// Resolver
resolve: {
// https://vitejs.dev/config/shared-options.html#resolve-alias
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
'~': fileURLToPath(new URL('./node_modules', import.meta.url)),
},
extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'],
},
// Build Options
// https://vitejs.dev/config/#build-options
build: {
outDir: mode === 'docs' ? 'docs' : 'dist',
lib:
mode === 'docs'
? false
: {
entry: fileURLToPath(new URL('src/Reverb.ts', import.meta.url)),
name: 'Reverb',
formats: ['es', 'umd', 'iife'],
fileName: format => `Reverb.${format}.js`,
},
rollupOptions: {
input:
mode === 'docs'
? {
'': fileURLToPath(new URL('./index.html', import.meta.url)),
localaudio: fileURLToPath(
new URL('./localaudio.html', import.meta.url)
),
}
: undefined,
plugins: [
mode === 'analyze'
? // rollup-plugin-visualizer
// https://github.com/btd/rollup-plugin-visualizer
visualizer({
open: true,
filename: './stats.html',
gzipSize: false,
brotliSize: false,
})
: undefined,
],
external:
mode === 'docs'
? []
: [
'@thi.ng/colored-noise',
'@thi.ng/random',
'@thi.ng/transducers',
],
output: {
globals: {
'@thi.ng/colored-noise': 'coloredNoise',
'@thi.ng/random': 'random',
'@thi.ng/transducers': 'transducers',
},
},
},
target: 'esnext',
// minify: mode === 'docs',
},
esbuild: {
drop: command === 'serve' ? [] : ['console'],
},
};
// Write meta data.
writeFileSync(
fileURLToPath(new URL('src/Meta.ts', import.meta.url)),
`import type MetaInterface from './interfaces/MetaInterface';
// This file is auto-generated by the build system.
const Meta: MetaInterface = {
version: '${pkg.version}',
date: '${new Date().toISOString()}',
};
export default Meta;
`
);
return config;
});