perf: reduce bundle size by specifing external deps
[e-mobility-charging-stations-simulator.git] / bundle.js
1 /* eslint-disable n/no-unpublished-import */
2 import { env } from 'node:process';
3
4 import { build } from 'esbuild';
5 import { clean } from 'esbuild-plugin-clean';
6 import { copy } from 'esbuild-plugin-copy';
7
8 const isDevelopmentBuild = env.BUILD === 'development';
9 const sourcemap = !!isDevelopmentBuild;
10
11 (async () => {
12 await build({
13 entryPoints: ['./src/start.ts', './src/charging-station/ChargingStationWorker.ts'],
14 bundle: true,
15 platform: 'node',
16 format: 'esm',
17 external: [
18 '@mikro-orm/*',
19 'ajv',
20 'ajv-formats',
21 'basic-ftp',
22 'chalk',
23 'date-fns',
24 'http-status-codes',
25 'just-merge',
26 'logform',
27 'mnemonist',
28 'mongodb',
29 'node:*',
30 'poolifier',
31 'tar',
32 'winston',
33 'winston-daily-rotate-file',
34 'ws',
35 ],
36 minify: true,
37 sourcemap,
38 entryNames: '[name]',
39 outdir: './dist',
40 banner: {
41 js: "import { createRequire } from 'module';const require = createRequire(import.meta.url);",
42 },
43 plugins: [
44 clean({
45 patterns: [
46 './dist/*',
47 '!./dist/assets',
48 './dist/assets/*.json',
49 './dist/assets/json-schemas',
50 './dist/assets/station-templates',
51 './dist/assets/ui-protocol',
52 ],
53 }),
54 copy({
55 assets: [
56 {
57 from: ['./src/assets/config.json'],
58 to: ['./assets'],
59 },
60 {
61 from: ['./src/assets/idtags!(-template)*.json'],
62 to: ['./assets'],
63 },
64 {
65 from: ['./src/assets/json-schemas/**/*.json'],
66 to: ['./assets/json-schemas'],
67 },
68 {
69 from: ['./src/assets/station-templates/**/*.json'],
70 to: ['./assets/station-templates'],
71 },
72 ],
73 }),
74 ],
75 });
76 })();