Skip to content

Commit 558c55c

Browse files
authored
feat: add esbuild (#54)
1 parent 28385dd commit 558c55c

File tree

9 files changed

+59
-9
lines changed

9 files changed

+59
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Build Tools Comparison
22

3-
Benchmark comparing JavaScript bundlers and build tools ([Rspack](https://github.com/web-infra-dev/rspack), [Rsbuild](https://github.com/web-infra-dev/rsbuild), [webpack](https://github.com/webpack/webpack), [Vite](https://github.com/vitejs/vite), [rolldown-vite](https://github.com/vitejs/rolldown-vite) and [Farm](https://github.com/farm-fe/farm)) for dev server startup time, build performance and bundle size for applications with different module sizes.
3+
Benchmark comparing JavaScript bundlers and build tools ([Rspack](https://github.com/web-infra-dev/rspack), [Rsbuild](https://github.com/web-infra-dev/rsbuild), [webpack](https://github.com/webpack/webpack), [Vite](https://github.com/vitejs/vite), [rolldown-vite](https://github.com/vitejs/rolldown-vite), [esbuild](https://github.com/evanw/esbuild), and [Farm](https://github.com/farm-fe/farm)) for dev server startup time, build performance and bundle size for applications with different module sizes.
44

55
## Metrics
66

benchmark.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,18 @@ toolNames.forEach((name) => {
297297
}),
298298
);
299299
break;
300+
case 'esbuild':
301+
buildTools.push(
302+
new BuildTool({
303+
name: 'esbuild ' + require('esbuild/package.json').version,
304+
port: 8080,
305+
startScript: 'start:esbuild',
306+
startedRegex: /esbuild built in (\d+) ms/,
307+
buildScript: 'build:esbuild',
308+
binFilePath: 'esbuild/bin/esbuild',
309+
}),
310+
);
311+
break;
300312
case 'farm':
301313
buildTools.push(
302314
new BuildTool({

cases/rome/benchmark-config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export const config = {
2-
supportedTools: ['rspack', 'rsbuild', 'rolldown', 'webpack'],
3-
defaultTools: ['rspack', 'rsbuild', 'rolldown', 'webpack'],
2+
supportedTools: ['rspack', 'rsbuild', 'rolldown', 'webpack', 'esbuild'],
3+
defaultTools: ['rspack', 'rsbuild', 'rolldown', 'webpack', 'esbuild'],
44
dev: false,
55
};

cases/rome/esbuild.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import esbuild from '../../shared/esbuild.mjs';
2+
3+
await esbuild({
4+
entryPoints: ['./src/entry.ts'],
5+
platform: 'node',
6+
});

cases/rome/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
"name": "rome",
33
"version": "0.0.0",
44
"scripts": {
5-
"build:rolldown": "rolldown build --config rolldown.config.mjs",
5+
"build:rolldown": "cross-env NODE_ENV=production rolldown build --config rolldown.config.mjs",
66
"build:rspack": "rspack build",
77
"build:rsbuild": "rsbuild build",
8-
"build:webpack": "webpack build",
9-
"build:vite": "vite build"
8+
"build:webpack": "cross-env NODE_ENV=production webpack build",
9+
"build:vite": "vite build",
10+
"build:esbuild": "cross-env NODE_ENV=production node esbuild.mjs"
1011
},
1112
"devDependencies": {
1213
"tsconfig-paths-webpack-plugin": "^4.2.0",

cases/ui-components/benchmark-config.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export const config = {
66
'rolldown-vite',
77
'rolldown',
88
'webpack',
9+
'esbuild',
910
],
1011
defaultTools: [
1112
'rspack',
@@ -14,6 +15,7 @@ export const config = {
1415
'rolldown-vite',
1516
'rolldown',
1617
'webpack',
18+
'esbuild',
1719
],
1820
dev: false,
1921
};

cases/ui-components/esbuild.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import esbuild from '../../shared/esbuild.mjs';
2+
3+
await esbuild({
4+
entryPoints: ['./src/index.js'],
5+
});

cases/ui-components/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
"name": "ui-libraries",
33
"version": "0.0.0",
44
"scripts": {
5-
"build:rolldown": "rolldown build --config rolldown.config.mjs",
5+
"build:rolldown": "cross-env NODE_ENV=production rolldown build --config rolldown.config.mjs",
66
"build:rspack": "rspack build",
77
"build:rsbuild": "rsbuild build",
8-
"build:webpack": "webpack build",
8+
"build:webpack": "cross-env NODE_ENV=production webpack build",
99
"build:vite": "node ../../node_modules/vite/bin/vite.js build",
10-
"build:rolldown-vite": "node ../../node_modules/rolldown-vite/bin/vite.js build -c rolldown-vite.config.mjs"
10+
"build:rolldown-vite": "node ../../node_modules/rolldown-vite/bin/vite.js build -c rolldown-vite.config.mjs",
11+
"build:esbuild": "cross-env NODE_ENV=production node esbuild.mjs"
1112
},
1213
"dependencies": {
1314
"@chakra-ui/react": "^3.22.0",

shared/esbuild.mjs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { build } from 'esbuild';
2+
import { isProd, target } from './constants.mjs';
3+
4+
export default async (config) => {
5+
const startTime = Date.now();
6+
7+
await build({
8+
outdir: 'dist',
9+
format: 'esm',
10+
target,
11+
bundle: true,
12+
define: {
13+
'process.env.NODE_ENV': JSON.stringify(
14+
isProd ? 'production' : 'development',
15+
),
16+
},
17+
minify: isProd,
18+
...config,
19+
});
20+
21+
const endTime = Date.now() - startTime;
22+
console.log(`esbuild built in ${endTime} ms`);
23+
};

0 commit comments

Comments
 (0)