Migrate from webpack to vite (#37002)

Replace webpack with Vite 8 as the frontend bundler. Frontend build is
around 3-4 times faster than before. Will work on all platforms
including riscv64 (via wasm).

`iife.js` is a classic render-blocking script in `<head>` (handles web
components/early DOM setup). `index.js` is loaded as a `type="module"`
script in the footer. All other JS chunks are also module scripts
(supported in all browsers since 2018).

Entry filenames are content-hashed (e.g. `index.C6Z2MRVQ.js`) and
resolved at runtime via the Vite manifest, eliminating the `?v=` cache
busting (which was unreliable in some scenarios like vscode dev build).

Replaces: https://github.com/go-gitea/gitea/pull/36896
Fixes: https://github.com/go-gitea/gitea/issues/17793
Signed-off-by: silverwind <me@silverwind.io>
Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Claude (Opus 4.6) <noreply@anthropic.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
silverwind
2026-03-29 12:24:30 +02:00
committed by GitHub
parent 6288c87181
commit 0ec66b5380
88 changed files with 1706 additions and 1727 deletions

View File

@@ -18,8 +18,7 @@
"@primer/octicons": "19.23.1",
"@resvg/resvg-wasm": "2.6.2",
"@silverwind/vue3-calendar-heatmap": "2.1.1",
"@techknowlogick/license-checker-webpack-plugin": "0.3.0",
"add-asset-webpack-plugin": "3.1.1",
"@vitejs/plugin-vue": "6.0.5",
"ansi_up": "6.0.6",
"asciinema-player": "3.15.1",
"chart.js": "4.5.1",
@@ -29,25 +28,22 @@
"colord": "2.9.3",
"compare-versions": "6.1.1",
"cropperjs": "1.6.2",
"css-loader": "7.1.4",
"dayjs": "1.11.20",
"dropzone": "6.0.0-beta.2",
"easymde": "2.20.0",
"esbuild-loader": "4.4.2",
"esbuild": "0.27.4",
"htmx.org": "2.0.8",
"idiomorph": "0.7.4",
"jquery": "4.0.0",
"js-yaml": "4.1.1",
"katex": "0.16.43",
"mermaid": "11.13.0",
"mini-css-extract-plugin": "2.10.2",
"monaco-editor": "0.55.1",
"monaco-editor-webpack-plugin": "7.1.1",
"online-3d-viewer": "0.18.0",
"pdfobject": "2.3.1",
"perfect-debounce": "2.1.0",
"postcss": "8.5.8",
"postcss-loader": "8.2.1",
"rollup-plugin-license": "3.7.0",
"sortablejs": "1.15.7",
"swagger-ui-dist": "5.32.1",
"tailwindcss": "3.4.19",
@@ -57,12 +53,11 @@
"tributejs": "5.1.3",
"uint8-to-base64": "0.2.1",
"vanilla-colorful": "0.7.2",
"vite": "8.0.3",
"vite-string-plugin": "2.0.2",
"vue": "3.5.31",
"vue-bar-graph": "2.2.0",
"vue-chartjs": "5.3.3",
"vue-loader": "17.4.2",
"webpack": "5.105.4",
"webpack-cli": "7.0.2",
"wrap-ansi": "10.0.0"
},
"devDependencies": {
@@ -88,8 +83,8 @@
"eslint": "10.1.0",
"eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "5.1.1",
"eslint-plugin-github": "6.0.0",
"eslint-plugin-de-morgan": "2.1.1",
"eslint-plugin-github": "6.0.0",
"eslint-plugin-import-x": "4.16.2",
"eslint-plugin-playwright": "2.10.1",
"eslint-plugin-regexp": "3.1.0",
@@ -115,7 +110,6 @@
"typescript": "5.9.3",
"typescript-eslint": "8.57.2",
"updates": "17.12.0",
"vite-string-plugin": "2.0.2",
"vitest": "4.1.2",
"vue-tsc": "3.2.6"
},