feat(build): integrate frontend build into backend binary and update scripts
This commit is contained in:
+24
-12
@@ -1,23 +1,35 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// StaticFiles is the built frontend, rooted at the directory Vite writes to
|
||||
// (frontend/dist), so paths inside it are relative to that directory, e.g.
|
||||
// "index.html" or "assets/app.js". The path is relative to the working
|
||||
// directory, so the server is expected to run from the repository root.
|
||||
// distFS holds the built console. Vite writes it to web/dist (see the outDir
|
||||
// in frontend/vite.config.js) and it is compiled into the binary here, so a
|
||||
// running executable serves the whole frontend on its own: neither the
|
||||
// frontend sources nor web/dist need to exist on the machine that runs it.
|
||||
//
|
||||
// The all: prefix also picks up files whose names start with "_" or ".", which
|
||||
// the default pattern skips.
|
||||
//
|
||||
//go:embed all:dist
|
||||
var distFS embed.FS
|
||||
|
||||
// StaticFiles is the built frontend, rooted at the directory Vite writes to,
|
||||
// so paths inside it are relative to that directory, e.g. "index.html" or
|
||||
// "assets/app.js".
|
||||
//
|
||||
// web/dist is a build artifact and is not in a fresh checkout, so the console
|
||||
// has to be built before the backend compiles — any build-*.sh / build-*.bat
|
||||
// does it first, or run `npm run build` in frontend/ yourself. Compiling
|
||||
// without it fails with "pattern all:dist: no matching files found".
|
||||
var StaticFiles fs.FS
|
||||
|
||||
func init() {
|
||||
dir := filepath.Join("frontend", "dist")
|
||||
if _, err := os.Stat(dir); err == nil {
|
||||
StaticFiles = os.DirFS(dir)
|
||||
return
|
||||
sub, err := fs.Sub(distFS, "dist")
|
||||
if err != nil {
|
||||
panic("web: embedded frontend is unreadable: " + err.Error())
|
||||
}
|
||||
|
||||
StaticFiles = os.DirFS(".")
|
||||
StaticFiles = sub
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user