diff --git a/packages/desktop/electron/tsconfig.json b/packages/desktop/electron/tsconfig.json index 97b6f146a..f6139b8f0 100644 --- a/packages/desktop/electron/tsconfig.json +++ b/packages/desktop/electron/tsconfig.json @@ -2,11 +2,8 @@ "compilerOptions": { "target": "ESNext", "module": "commonjs", - "sourceMap": false, - "outDir": "../build", - "rootDir": "../", + "noEmit": true, + "esModuleInterop": true, "skipLibCheck": true - }, - "include": ["."], - "exclude": ["./**/*.test.*", "./**/__tests__"] + } } diff --git a/packages/desktop/package.json b/packages/desktop/package.json index a1ab5606a..b61412a37 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -18,8 +18,8 @@ "build:web": "craco build && rimraf 'build/**/*.whl' && rimraf 'build/pypi'", "test": "craco test", "eject": "craco eject", - "start:electron": "concurrently \"tsc -p electron -w\" \"cross-env NODE_ENV=\"development\" electron .\"", - "build:electron": "tsc -p electron", + "start:electron": "tsc -p electron && cross-env NODE_ENV=development concurrently \"./scripts/build_electron.js --watch\" \"electron .\"", + "build:electron": "tsc -p electron && cross-env NODE_ENV=production ./scripts/build_electron.js", "build:pyodide": "curl -L https://github.com/pyodide/pyodide/releases/download/0.25.0/pyodide-core-0.25.0.tar.bz2 | tar xj -C ./build --files-from=./pyodide-files.txt", "build:bin": "tsc -p bin-src && ./scripts/build_bin.js", "build:wheels": "./scripts/copy_wheels.js", diff --git a/packages/desktop/scripts/build_electron.js b/packages/desktop/scripts/build_electron.js new file mode 100755 index 000000000..7b49ca3e2 --- /dev/null +++ b/packages/desktop/scripts/build_electron.js @@ -0,0 +1,31 @@ +#!/usr/bin/env node + +const { build, context } = require("esbuild"); +const path = require("path"); + +// Build script using esbuild like https://esbuild.github.io/getting-started/#build-scripts + +const watch = process.argv.includes("--watch"); +const production = process.env.NODE_ENV === "production"; + +(watch ? context : build)({ + entryPoints: [ + path.resolve(__dirname, "../electron/main.ts"), + path.resolve(__dirname, "../electron/preload.ts"), + ], + bundle: true, + minify: production, + platform: "node", + outdir: path.resolve(__dirname, "../build/electron"), + external: ["electron", "electron-reload"], + define: { + ...(process.env.NODE_ENV != null + ? { + "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV), + } + : null), + }, + logLevel: "info", +}) + .then((buildResultOrContext) => watch && buildResultOrContext.watch()) + .catch(() => process.exit(1));