-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathbuild-esbuild_options.ts
67 lines (63 loc) · 1.97 KB
/
build-esbuild_options.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
/* eslint-disable @typescript-eslint/no-unsafe-call */
import {type BuildOptions, type Plugin} from 'esbuild';
// @ts-expect-error TS7016
import LessPluginNpmImport from 'less-plugin-npm-import';
// @ts-expect-error TS7016
import LessPluginPresetEnv from 'less-plugin-preset-env';
import {SOURCE_MAP} from '../constant';
import browserslist from 'browserslist';
import {browserslistToTargets} from 'lightningcss';
import esbuildPluginCssModules from 'esbuild-css-modules-plugin';
import {lessLoader as esbuildPluginLess} from 'esbuild-plugin-less';
import esbuildPluginPostcss from 'esbuild-postcss';
import esbuildPluginVue from 'esbuild-plugin-vue3';
import postcssLoadConfig from 'postcss-load-config';
/**
* @summary Do not forget to declare these file extensions in `src/global.d.ts`
* @see {@link https://esbuild.github.io/api/#loader}
*/
const loader = {
'.gif': 'dataurl',
'.ico': 'dataurl',
'.jpg': 'dataurl',
'.jpeg': 'dataurl',
'.png': 'dataurl',
'.svg': 'text',
} as const satisfies BuildOptions['loader'];
const lessOptions: Less.Options = {
plugins: [new LessPluginPresetEnv() as unknown as Less.Plugin, new LessPluginNpmImport() as unknown as Less.Plugin],
};
const postcssConfig = await postcssLoadConfig();
const targets = browserslistToTargets(browserslist());
/**
* @see {@link https://esbuild.github.io/api/#general-options}
*/
const esbuildOptions = {
loader,
bundle: true,
charset: 'utf8',
define: {
'process.env.NODE_ENV': '"production"',
},
format: 'cjs',
legalComments: 'inline',
plugins: [
esbuildPluginVue({
enableDevTools: false,
postcss: postcssConfig,
preprocessorOptions: lessOptions,
}) as unknown as Plugin,
esbuildPluginCssModules({
targets,
filter: /\.module\.(?:css|less)$/i,
forceInlineImages: true,
namedExports: true,
}),
esbuildPluginPostcss(),
esbuildPluginLess(lessOptions),
],
sourcemap: SOURCE_MAP ? 'inline' : false,
treeShaking: true,
write: false,
} as const satisfies BuildOptions;
export {esbuildOptions};