Skip to content

Commit c4eea57

Browse files
authored
refactor: preserve components structure for better tree shaking (#4418)
Here replaced esbuild with vite for building sdk-components packages. Vite can be configured to output preserved structure instead of bundling everything into single module which hurts treeshaking a lot. sdk-components-react ./fixtures/ssg/dist/client: 284kB (-24kB) ./fixtures/webstudio-remix-netlify-functions/build/client: 368kB (-28kB) ./fixtures/webstudio-remix-vercel/build/client: 1004kB (-8kB) sdk-components-react-radix ./fixtures/ssg/dist/client: 284kB (-4kB) ./fixtures/webstudio-remix-netlify-functions/build/client: 372kB (0kB) ./fixtures/webstudio-remix-vercel/build/client: 900kB (-108kB)
1 parent d1bd5df commit c4eea57

File tree

6 files changed

+36
-5
lines changed

6 files changed

+36
-5
lines changed

.github/workflows/main.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,9 @@ jobs:
8383
}
8484
}
8585
const results = [
86-
await assertSize('./fixtures/ssg/dist/client', 308),
87-
await assertSize('./fixtures/webstudio-remix-netlify-functions/build/client', 396),
86+
await assertSize('./fixtures/ssg/dist/client', 288),
87+
await assertSize('./fixtures/webstudio-remix-netlify-functions/build/client', 376),
88+
await assertSize('./fixtures/webstudio-remix-vercel/build/client', 904),
8889
]
8990
for (const result of results) {
9091
if (result.passed) {

packages/sdk-components-react-radix/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
}
3636
},
3737
"scripts": {
38-
"build": "rm -rf lib && esbuild src/components.ts src/metas.ts src/props.ts src/hooks.ts --outdir=lib --bundle --format=esm --packages=external",
38+
"build": "vite build --config ../../vite.sdk-components.config.ts",
3939
"build:args": "NODE_OPTIONS=--conditions=webstudio generate-arg-types './src/*.tsx !./src/*.stories.tsx !./src/*.ws.ts !./src/*.test.{ts,tsx}' -e asChild -e modal -e defaultOpen -e defaultChecked && prettier --write \"**/*.props.ts\"",
4040
"build:tailwind": "tsx scripts/generate-tailwind-theme.ts && prettier --write src/theme/__generated__",
4141
"build:stories": "webstudio-sdk generate-stories && prettier --write \"src/__generated__/*.stories.tsx\"",

packages/sdk-components-react-remix/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
}
3131
},
3232
"scripts": {
33-
"build": "rm -rf lib && esbuild src/components.ts src/metas.ts src/props.ts --outdir=lib --bundle --format=esm --packages=external",
33+
"build": "vite build --config ../../vite.sdk-components.config.ts",
3434
"build:args": "NODE_OPTIONS=--conditions=webstudio generate-arg-types './src/*.tsx !./src/**/*.stories.tsx !./src/**/*.ws.ts' && prettier --write \"**/*.props.ts\"",
3535
"dts": "tsc --project tsconfig.dts.json",
3636
"typecheck": "tsc"

packages/sdk-components-react-remix/src/hooks.ts

Whitespace-only changes.

packages/sdk-components-react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
}
3636
},
3737
"scripts": {
38-
"build": "rm -rf lib && esbuild src/components.ts src/metas.ts src/props.ts --outdir=lib --bundle --format=esm --packages=external",
38+
"build": "vite build --config ../../vite.sdk-components.config.ts",
3939
"build:args": "NODE_OPTIONS=--conditions=webstudio generate-arg-types './src/*.tsx !./src/*.stories.tsx !./src/*.test.{ts,tsx} !./src/*.ws.ts' && prettier --write \"**/*.props.ts\"",
4040
"dts": "tsc --project tsconfig.dts.json",
4141
"test": "vitest run",

vite.sdk-components.config.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { defineConfig } from "vite";
2+
3+
const isBareImport = (id: string) =>
4+
id.startsWith("@") || id.includes(".") === false;
5+
6+
export default defineConfig({
7+
// resolve only webstudio condition in tests
8+
resolve: {
9+
conditions: ["webstudio"],
10+
},
11+
build: {
12+
lib: {
13+
entry: [
14+
"src/components.ts",
15+
"src/metas.ts",
16+
"src/props.ts",
17+
"src/hooks.ts",
18+
],
19+
formats: ["es"],
20+
},
21+
rollupOptions: {
22+
external: isBareImport,
23+
output: {
24+
preserveModules: true,
25+
preserveModulesRoot: "src",
26+
dir: "lib",
27+
},
28+
},
29+
},
30+
});

0 commit comments

Comments
 (0)