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

@@ -538,6 +538,58 @@ strong.attention-caution, svg.attention-caution {
overflow-menu {
border-bottom: 1px solid var(--color-secondary) !important;
display: flex;
position: relative;
}
overflow-menu .overflow-menu-popup {
position: absolute;
top: calc(100% + 8px);
right: 0;
z-index: 100;
background-color: var(--color-menu);
color: var(--color-text);
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius);
box-shadow: 0 6px 18px var(--color-shadow);
padding: 4px 0;
}
overflow-menu .overflow-menu-popup::before,
overflow-menu .overflow-menu-popup::after {
content: "";
position: absolute;
right: 10px;
border: 8px solid transparent;
}
overflow-menu .overflow-menu-popup::before {
bottom: 100%;
border-bottom-color: var(--color-secondary);
}
overflow-menu .overflow-menu-popup::after {
bottom: calc(100% - 1px);
border-bottom-color: var(--color-menu);
}
overflow-menu .overflow-menu-popup > .item {
display: flex;
align-items: center;
padding: 9px 18px !important;
color: var(--color-text) !important;
background: transparent !important;
text-decoration: none;
gap: 10px;
width: 100%;
}
overflow-menu .overflow-menu-popup > .item:hover,
overflow-menu .overflow-menu-popup > .item:focus {
background: var(--color-hover) !important;
}
overflow-menu .overflow-menu-popup > .item.active {
background: var(--color-active) !important;
}
overflow-menu .overflow-menu-items {