Skip to content

Commit be8c225

Browse files
optimise bundle size for lowcoder
1 parent 9b0642e commit be8c225

File tree

4 files changed

+113
-1
lines changed

4 files changed

+113
-1
lines changed

client/packages/lowcoder/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
flex-direction: column;
3131
top: 0;
3232
z-index: 10000;
33+
transition: opacity 0.25s linear;
3334
}
3435
#loading svg {
3536
animation: breath 1s linear infinite;

client/packages/lowcoder/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
"eslint-config-react-app": "^7.0.1",
128128
"eslint-plugin-only-ascii": "^0.0.0",
129129
"http-proxy-middleware": "^2.0.6",
130+
"rollup-plugin-terser": "^7.0.2",
130131
"rollup-plugin-visualizer": "^5.9.2",
131132
"typescript": "^4.8.4",
132133
"vite": "^4.5.5",

client/packages/lowcoder/vite.config.mts

+110-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import dotenv from "dotenv";
2-
import { defineConfig, ServerOptions, UserConfig } from "vite";
2+
import { defineConfig, PluginOption, ServerOptions, UserConfig } from "vite";
33
import react from "@vitejs/plugin-react";
44
import viteTsconfigPaths from "vite-tsconfig-paths";
55
import svgrPlugin from "vite-plugin-svgr";
@@ -12,6 +12,7 @@ import dynamicImport from 'vite-plugin-dynamic-import';
1212
import { ensureLastSlash } from "./src/dev-utils/util";
1313
import { buildVars } from "./src/dev-utils/buildVars";
1414
import { globalDepPlugin } from "./src/dev-utils/globalDepPlguin";
15+
import { terser } from 'rollup-plugin-terser';
1516
// import { nodePolyfills } from 'vite-plugin-node-polyfills'
1617

1718
dotenv.config();
@@ -66,16 +67,124 @@ export const viteConfig: UserConfig = {
6667
},
6768
base,
6869
build: {
70+
minify: "terser",
6971
manifest: true,
7072
target: "es2020",
7173
cssTarget: "chrome87",
7274
outDir: "build",
7375
assetsDir: "static",
7476
emptyOutDir: false,
7577
rollupOptions: {
78+
treeshake: {
79+
moduleSideEffects: true,
80+
propertyReadSideEffects: false,
81+
tryCatchDeoptimization: false,
82+
unknownGlobalSideEffects: false,
83+
},
7684
output: {
7785
chunkFileNames: "[hash].js",
86+
manualChunks: (id) => {
87+
if (id.includes("node_modules")) {
88+
// UI LIBRARIES
89+
if (id.includes("@ant-design/icons")) return "ant-design-icons";
90+
if (id.includes("node_modules/antd")) return "antd";
91+
if (id.includes("styled-components")) return "styled-components";
92+
93+
// 🔹 BARCODE & QR CODE PROCESSING
94+
if (id.includes("react-qr-barcode-scanner")) return "barcode";
95+
96+
// TEXT EDITORS & PARSERS
97+
if (id.includes("codemirror")) return "codemirror";
98+
if (id.includes("quill")) return "quill";
99+
if (id.includes("react-json-view")) return "react-json-view";
100+
if (id.includes("react-quill")) return "react-quill";
101+
if (id.includes("remark-gfm")) return "remark-gfm";
102+
if (id.includes("rehype-raw")) return "rehype-raw";
103+
if (id.includes("rehype-sanitize")) return "rehype-sanitize";
104+
105+
// DRAG & DROP
106+
if (id.includes("@dnd-kit")) return "dnd-kit";
107+
if (id.includes("react-draggable")) return "react-draggable";
108+
if (id.includes("react-grid-layout")) return "react-grid-layout";
109+
if (id.includes("react-sortable-hoc")) return "react-sortable-hoc";
110+
111+
// ICONS & FONTS
112+
if (id.includes("@fortawesome")) return "fontawesome";
113+
if (id.includes("@remixicon")) return "remixicon";
114+
115+
// DATE/TIME HANDLING
116+
if (id.includes("moment")) return "moment";
117+
if (id.includes("date-fns")) return "date-fns";
118+
if (id.includes("dayjs")) return "dayjs";
119+
120+
// UTILITIES & HELPERS
121+
if (id.includes("clsx")) return "clsx";
122+
if (id.includes("immer")) return "immer";
123+
if (id.includes("lodash")) return "lodash";
124+
if (id.includes("lodash-es")) return "lodash-es";
125+
if (id.includes("uuid")) return "uuid";
126+
if (id.includes("ua-parser-js")) return "ua-parser-js";
127+
if (id.includes("html2canvas")) return "ua-parser-js";
128+
if (id.includes("numbro")) return "numbro";
129+
130+
// FILE & DATA PROCESSING
131+
if (id.includes("buffer")) return "buffer";
132+
if (id.includes("file-saver")) return "file-saver";
133+
if (id.includes("papaparse")) return "papaparse";
134+
if (id.includes("parse5")) return "parse5";
135+
if (id.includes("xlsx")) return "xlsx";
136+
if (id.includes("alasql")) return "alasql";
137+
if (id.includes("sql-formatter")) return "sql-formatter";
138+
139+
// NETWORK & HTTP
140+
if (id.includes("axios")) return "axios";
141+
if (id.includes("fetch")) return "fetch";
142+
if (id.includes("http")) return "http-modules";
143+
if (id.includes("https")) return "https-modules";
144+
145+
// WEB SOCKETS & STREAMING
146+
if (id.includes("sockjs")) return "websockets";
147+
if (id.includes("websocket")) return "websockets";
148+
149+
// STATE MANAGEMENT
150+
if (id.includes("react-error-boundary")) return "react-error-boundary";
151+
if (id.includes("redux-devtools-extension")) return "redux-devtools";
152+
153+
// POLYFILLS & BROWSER COMPATIBILITY
154+
// if (id.includes("core-js")) return "core-js";
155+
if (id.includes("regenerator-runtime")) return "regenerator-runtime";
156+
if (id.includes("eslint4b-prebuilt-2")) return "eslint4b-prebuilt-2";
157+
158+
// MISCELLANEOUS
159+
if (id.includes("cnchar")) return "cnchar";
160+
if (id.includes("hotkeys-js")) return "hotkeys-js";
161+
if (id.includes("loglevel")) return "loglevel";
162+
if (id.includes("qrcode.react")) return "qrcode-react";
163+
if (id.includes("react-joyride")) return "react-joyride";
164+
if (id.includes("rc-trigger")) return "rc-trigger";
165+
if (id.includes("really-relaxed-json")) return "really-relaxed-json";
166+
if (id.includes("simplebar-react")) return "simplebar-react";
167+
if (id.includes("react-documents")) return "react-documents";
168+
if (id.includes("react-colorful")) return "react-colorful";
169+
if (id.includes("react-best-gradient-color-picker")) return "react-best-gradient-color-picker";
170+
if (id.includes("@supabase/supabase-js")) return "supabase";
171+
return null;
172+
}
173+
return null;
174+
},
78175
},
176+
plugins: [
177+
terser({
178+
compress: {
179+
drop_console: true,
180+
drop_debugger: true,
181+
pure_funcs: ["console.info", "console.debug", "console.log"],
182+
},
183+
format: {
184+
comments: /(@vite-ignore|webpackIgnore)/
185+
},
186+
}) as PluginOption,
187+
],
79188
onwarn: (warning, warn) => {
80189
if (warning.code === 'MODULE_LEVEL_DIRECTIVE') {
81190
return

client/yarn.lock

+1
Original file line numberDiff line numberDiff line change
@@ -14242,6 +14242,7 @@ coolshapes-react@lowcoder-org/coolshapes-react:
1424214242
rehype-sanitize: ^5.0.1
1424314243
remark-gfm: ^4.0.0
1424414244
resize-observer-polyfill: ^1.5.1
14245+
rollup-plugin-terser: ^7.0.2
1424514246
rollup-plugin-visualizer: ^5.9.2
1424614247
simplebar-react: ^3.2.4
1424714248
sql-formatter: ^8.2.0

0 commit comments

Comments
 (0)