diff options
author | Kristóf Marussy <kristof@marussy.com> | 2021-12-30 00:26:01 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2021-12-30 02:24:28 +0100 |
commit | 61fd13c55f5e69a9d8b32dd0d74b08870783bcce (patch) | |
tree | 4f3f97b1629f3c262bea076b596bc7245ccbc0bd /scripts/build.js | |
parent | Revert "refactor: Switch back to consola for prettyness" (diff) | |
download | sophie-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.js | 37 |
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 @@ | |||
1 | const esbuild = require('esbuild'); | ||
2 | const { join } = require('path'); | ||
3 | const vite = require('vite'); | ||
4 | |||
5 | /** | ||
6 | * @param {string} packageName | ||
7 | * @returns {Promise<import('esbuild').BuildResult>} | ||
8 | */ | ||
9 | function buildPackageEsbuild(packageName) { | ||
10 | const config = require(`../packages/${packageName}/esbuild.config.js`); | ||
11 | return esbuild.build(config); | ||
12 | } | ||
13 | |||
14 | function buildPackageVite(packageName) { | ||
15 | return vite.build({ | ||
16 | configFile: join(__dirname, `../packages/${packageName}/vite.config.js`), | ||
17 | }); | ||
18 | } | ||
19 | |||
20 | function 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 | |||
34 | buildAll().catch((err) => { | ||
35 | console.error(err); | ||
36 | process.exit(1); | ||
37 | }); | ||