aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/build.js
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-30 00:26:01 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-12-30 02:24:28 +0100
commit61fd13c55f5e69a9d8b32dd0d74b08870783bcce (patch)
tree4f3f97b1629f3c262bea076b596bc7245ccbc0bd /scripts/build.js
parentRevert "refactor: Switch back to consola for prettyness" (diff)
downloadsophie-61fd13c55f5e69a9d8b32dd0d74b08870783bcce.tar.gz
sophie-61fd13c55f5e69a9d8b32dd0d74b08870783bcce.tar.zst
sophie-61fd13c55f5e69a9d8b32dd0d74b08870783bcce.zip
build: Switch to esbuild
We will build all packages except the frontend (where vite remains in use) with esbuild. For some reason, the @yarnpkg/esbuild-plugin-pnp doesn't allow esbuild to load esm modules and we fall back to commonjs for dependencies. Hence we had to switch back to node_modules (but still rely on yarn hardlinking for a more efficient install).
Diffstat (limited to 'scripts/build.js')
-rw-r--r--scripts/build.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/scripts/build.js b/scripts/build.js
new file mode 100644
index 0000000..416530d
--- /dev/null
+++ b/scripts/build.js
@@ -0,0 +1,37 @@
1const esbuild = require('esbuild');
2const { join } = require('path');
3const vite = require('vite');
4
5/**
6 * @param {string} packageName
7 * @returns {Promise<import('esbuild').BuildResult>}
8 */
9function buildPackageEsbuild(packageName) {
10 const config = require(`../packages/${packageName}/esbuild.config.js`);
11 return esbuild.build(config);
12}
13
14function buildPackageVite(packageName) {
15 return vite.build({
16 configFile: join(__dirname, `../packages/${packageName}/vite.config.js`),
17 });
18}
19
20function buildAll() {
21 // Esbuild can natively load a typescript main file,
22 // so we don't need to bundle `service-shared`.
23 // We onyl bundle `shared` for vite.
24 const buildShared = buildPackageEsbuild('shared');
25 return Promise.all([
26 buildShared.then(() => buildPackageEsbuild('main')),
27 buildPackageEsbuild('service-inject'),
28 buildPackageEsbuild('service-preload'),
29 buildPackageEsbuild('preload'),
30 buildPackageVite('renderer'),
31 ]);
32}
33
34buildAll().catch((err) => {
35 console.error(err);
36 process.exit(1);
37});