This repository has been archived by the owner on Feb 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.js
113 lines (107 loc) · 2.23 KB
/
build.js
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
const { build } = require('esbuild');
/**
* @type {import('esbuild').BuildOptions}
*/
const commonServer = {
entryPoints: ['src/server.tsx'],
platform: 'node',
};
/**
* @type {import('esbuild').BuildOptions}
*/
const commonClient = {
entryPoints: ['src/client.tsx'],
platform: 'node',
sourcemap: 'linked',
minify: true,
};
/**
* @type {Record<string, import('esbuild').BuildOptions>}
*/
const configs = {
cli: {
entryPoints: ['src/cli.ts'],
outfile: 'dist/cli.cjs',
platform: 'node',
format: 'cjs',
target: 'node12',
},
serverCjs: {
...commonServer,
outfile: 'dist/server.cjs',
format: 'cjs',
target: 'node12',
},
serverEsm: {
...commonServer,
outfile: 'dist/server.js',
format: 'esm',
target: 'node18',
},
clientCjs: {
...commonClient,
outfile: 'dist/client.cjs',
format: 'cjs',
target: 'es2015',
},
clientEsm: {
...commonClient,
outfile: 'dist/client.js',
format: 'esm',
target: 'es2018',
},
};
const watch = Boolean(process.env.WATCH);
const config = configs[process.env.CONFIG];
if (!config) {
throw new Error(
`Don't know how to build ${process.env.CONFIG}. Please set CONFIG env var`,
);
}
build({
...config,
watch: watch
? {
onRebuild(err) {
if (err) {
console.error('ERROR', process.env.CONFIG, err);
}
},
}
: false,
plugins: [
{
name: 'external',
setup(build) {
if (config.format === 'esm') {
build.onResolve({ filter: /@remix-run\/react\/components/ }, () => ({
path: '@remix-run/react/esm/components',
external: true,
}));
}
build.onResolve({ filter: /^[^./]|^\.[^./]|^\.\.[^/]/ }, (args) => {
if (args.path === 'node-polyglot') {
return {
path: '@xiphe/node-polyglot',
external: true,
};
}
return {
path: args.path,
external: true,
};
});
},
},
],
bundle: true,
})
.catch((err) => {
console.error('ERROR', process.env.CONFIG, err);
process.exit(1);
})
.then(() => {
if (watch) {
console.log('watching...');
}
});