You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.2 KiB
135 lines
3.2 KiB
const { build } = require("esbuild"); |
|
const { sassPlugin } = require("esbuild-sass-plugin"); |
|
const { externalGlobalPlugin } = require("esbuild-plugin-external-global"); |
|
|
|
// Will be used later for treeshaking |
|
//const fs = require("fs"); |
|
// const path = require("path"); |
|
|
|
// function getFiles(dir, files = []) { |
|
// const fileList = fs.readdirSync(dir); |
|
// for (const file of fileList) { |
|
// const name = `${dir}/${file}`; |
|
// if ( |
|
// name.includes("node_modules") || |
|
// name.includes("config") || |
|
// name.includes("package.json") || |
|
// name.includes("main.js") || |
|
// name.includes("index-node.ts") || |
|
// name.endsWith(".d.ts") |
|
// ) { |
|
// continue; |
|
// } |
|
|
|
// if (fs.statSync(name).isDirectory()) { |
|
// getFiles(name, files); |
|
// } else if ( |
|
// !( |
|
// name.match(/\.(sa|sc|c)ss$/) || |
|
// name.match(/\.(woff|woff2|eot|ttf|otf)$/) || |
|
// name.match(/locales\/[^/]+\.json$/) |
|
// ) |
|
// ) { |
|
// continue; |
|
// } else { |
|
// files.push(name); |
|
// } |
|
// } |
|
// return files; |
|
// } |
|
|
|
const browserConfig = { |
|
entryPoints: ["index.tsx"], |
|
bundle: true, |
|
format: "esm", |
|
plugins: [ |
|
sassPlugin(), |
|
externalGlobalPlugin({ |
|
react: "React", |
|
"react-dom": "ReactDOM", |
|
}), |
|
], |
|
splitting: true, |
|
loader: { |
|
".woff2": "file", |
|
}, |
|
}; |
|
const createESMBrowserBuild = async () => { |
|
// Development unminified build with source maps |
|
await build({ |
|
...browserConfig, |
|
outdir: "dist/browser/dev", |
|
sourcemap: true, |
|
chunkNames: "excalidraw-assets-dev/[name]-[hash]", |
|
assetNames: "excalidraw-assets-dev/[name]-[hash]", |
|
define: { |
|
"import.meta.env": JSON.stringify({ DEV: true }), |
|
}, |
|
}); |
|
|
|
// production minified build without sourcemaps |
|
await build({ |
|
...browserConfig, |
|
outdir: "dist/browser/prod", |
|
minify: true, |
|
chunkNames: "excalidraw-assets/[name]-[hash]", |
|
assetNames: "excalidraw-assets/[name]-[hash]", |
|
define: { |
|
"import.meta.env": JSON.stringify({ PROD: true }), |
|
}, |
|
}); |
|
}; |
|
|
|
// const BASE_PATH = `${path.resolve(`${__dirname}/..`)}`; |
|
// const filesinExcalidrawPackage = [ |
|
// ...getFiles(`${BASE_PATH}/packages/excalidraw`), |
|
// `${BASE_PATH}/packages/utils/export.ts`, |
|
// `${BASE_PATH}/packages/utils/bbox.ts`, |
|
// ...getFiles(`${BASE_PATH}/public/fonts`), |
|
// ]; |
|
|
|
// const filesToTransform = filesinExcalidrawPackage.filter((file) => { |
|
// return !( |
|
// file.includes("/__tests__/") || |
|
// file.includes(".test.") || |
|
// file.includes("/tests/") || |
|
// file.includes("example") |
|
// ); |
|
// }); |
|
|
|
const rawConfig = { |
|
entryPoints: ["index.tsx"], |
|
bundle: true, |
|
format: "esm", |
|
plugins: [sassPlugin()], |
|
loader: { |
|
".json": "copy", |
|
".woff2": "file", |
|
}, |
|
packages: "external", |
|
}; |
|
|
|
const createESMRawBuild = async () => { |
|
// Development unminified build with source maps |
|
await build({ |
|
...rawConfig, |
|
sourcemap: true, |
|
outdir: "dist/dev", |
|
define: { |
|
"import.meta.env": JSON.stringify({ DEV: true }), |
|
}, |
|
}); |
|
|
|
// production minified build without sourcemaps |
|
await build({ |
|
...rawConfig, |
|
minify: true, |
|
outdir: "dist/prod", |
|
define: { |
|
"import.meta.env": JSON.stringify({ PROD: true }), |
|
}, |
|
}); |
|
}; |
|
|
|
createESMRawBuild(); |
|
createESMBrowserBuild();
|
|
|