Files
yellowjacket/frontend/vite.config.mts
yonluandClaude Opus 5 453d5df0da fix(build): put wails3 on PATH for the Taskfile supervisors
`make sandbox`, `make dev`, `make build-dev` and `make build-prod` all
died with "/bin/sh: wails3: command not found". `wails3 dev` and
`wails3 task` are supervisors: they run the scaffold's Taskfile tree,
which invokes `wails3` by bare name in 54 places across four files. The
CLI is a vendored Go tool by design (plan 009, D3 — a global install
would be this build's first undeclared dependency), so that name did
not exist.

scripts/toolbin/wails3 execs `go tool wails3`, and the Makefile
prepends that directory only for the targets that start a supervisor.
Rewriting 54 scaffold call sites would be churn to redo on every
scaffold refresh; nothing global is installed either way.

The shim does not cd. The first version did, to be sure `go tool` found
the module — it does not need to — and that silently discarded the
`dir:` a task had set, so generate:icons failed with "open
appicon.png: no such file or directory" against a file that was there.

Three things the build path needed once it got that far:

- `frontend/package.json` gains `build:dev`, which build:frontend runs
  under DEV=true and which did not exist.
- Vite binds 127.0.0.1. It defaulted to `localhost`, which resolves to
  `[::1]` only here, while wails3 dev's asset proxy dials IPv4 — so the
  first request for the dev server was refused and the first paint
  raced a retry. Zero proxy errors after.
- The icons and the .desktop file are generated on every build.
  icons.icns/icon.ico are deterministic from our appicon.png (verified
  by regenerating), so the regenerated pair is committed and the churn
  ends; .task/ and the .desktop file are ignored.

Also corrects a claim: build-prod strips and trims but does **not**
UPX-compress — that was v2's `-upx` flag. Phase 1 recorded UPX as
still working, but neither build target had been run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDCbcCZQepnpSQYJ6SxxZm
2026-08-14 22:49:16 -04:00

48 lines
1.9 KiB
TypeScript

import path from "path";
import { defineConfig } from "vite";
export default defineConfig({
resolve: {
alias: {
// v3 generates bindings nested by Go import path. The
// alias absorbs the constant prefix, so a site imports
// "@go/library/library" rather than the full
// "bindings/yellowjacket/backend/library/library".
"@go": path.resolve(__dirname, "bindings/yellowjacket/backend"),
"@components": path.resolve(__dirname, "src/components"),
"@assets": path.resolve(__dirname, "src/assets"),
"@pages": path.resolve(__dirname, "src/pages"),
"@runtime": path.resolve(__dirname, "src/wails"),
"@utils": path.resolve(__dirname, "src/utils"),
"@store": path.resolve(__dirname, "src/store"),
},
},
build: {
// The bundled icons must be emitted as files, not inlined.
// Vite inlines any asset under 4 kB, and 63 of the 64 icons are
// under 4 kB, so the default put ~96 kB of base64 into the main
// chunk — parsed at startup, for icons most views never render.
// As files they are served same-origin (so still offline) and
// fetched on first use.
assetsInlineLimit: (filePath: string) =>
filePath.includes('/assets/icons/fa/') ? false : undefined,
rollupOptions: {
input: {
main: "index.html",
},
},
},
server: {
// IPv4, explicitly. Vite's default binds `localhost`, which on
// this machine resolves to `[::1]` *only* — and wails3 dev's
// asset proxy dials 127.0.0.1, so the app's first request for
// the dev server was answered with "connection refused" and the
// first paint raced a retry.
host: '127.0.0.1',
hmr: {
host: 'localhost',
protocol: 'ws',
},
},
});