diff options
| author | kj_sh604 | 2026-03-15 16:19:36 -0400 |
|---|---|---|
| committer | kj_sh604 | 2026-03-15 16:19:36 -0400 |
| commit | 72ece7c00b091011617fccf719df7f602cf4f7c7 (patch) | |
| tree | 75a085594679b4282faac3b3646d589bf5a67ea5 /scripts/buildPackage.js | |
| parent | c142734224f6263180e4cbe6fabec591a27972a1 (diff) | |
refactor: scripts/
Diffstat (limited to 'scripts/buildPackage.js')
| -rw-r--r-- | scripts/buildPackage.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/scripts/buildPackage.js b/scripts/buildPackage.js new file mode 100644 index 0000000..653af50 --- /dev/null +++ b/scripts/buildPackage.js @@ -0,0 +1,79 @@ +const path = require("path"); +const { build } = require("esbuild"); +const { sassPlugin } = require("esbuild-sass-plugin"); +const { parseEnvVariables } = require("../packages/excalidraw/env.cjs"); + +const ENV_VARS = { + development: { + ...parseEnvVariables(`${__dirname}/../.env.development`), + DEV: true, + }, + production: { + ...parseEnvVariables(`${__dirname}/../.env.production`), + PROD: true, + }, +}; + +// excludes all external dependencies and bundles only the source code +const getConfig = (outdir) => ({ + outdir, + bundle: true, + splitting: true, + format: "esm", + packages: "external", + plugins: [sassPlugin()], + target: "es2020", + assetNames: "[dir]/[name]", + chunkNames: "[dir]/[name]-[hash]", + alias: { + "@excalidraw/excalidraw": path.resolve(__dirname, "../packages/excalidraw"), + "@excalidraw/utils": path.resolve(__dirname, "../packages/utils"), + "@excalidraw/math": path.resolve(__dirname, "../packages/math"), + }, + loader: { + ".woff2": "file", + }, +}); + +function buildDev(config) { + return build({ + ...config, + sourcemap: true, + define: { + "import.meta.env": JSON.stringify(ENV_VARS.development), + }, + }); +} + +function buildProd(config) { + return build({ + ...config, + minify: true, + define: { + "import.meta.env": JSON.stringify(ENV_VARS.production), + }, + }); +} + +const createESMRawBuild = async () => { + const chunksConfig = { + entryPoints: ["index.tsx", "**/*.chunk.ts"], + entryNames: "[name]", + }; + + // development unminified build with source maps + await buildDev({ + ...getConfig("dist/dev"), + ...chunksConfig, + }); + + // production minified buld without sourcemaps + await buildProd({ + ...getConfig("dist/prod"), + ...chunksConfig, + }); +}; + +(async () => { + await createESMRawBuild(); +})(); |
