diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9a5aec --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c5f221d --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +all: build + +nil: + +reactNextJS/out/*: reactNextJS/app/* reactNextJS/*.js reactNextJS/*.json + cd reactNextJS && npm run build +nextjs: reactNextJS/out/* +serverdeps: nextjs *.go reactNextJS/addToServer.go + +build: serverdeps + go build server.go +run: serverdeps + go run server.go +air: nextjs nil + air server.go + +.PHONY: all build nextjs serverdeps run air nil diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4c15724 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module frontends + +go 1.22.3 diff --git a/reactNextJS/addToServer.go b/reactNextJS/addToServer.go new file mode 100644 index 0000000..5be7496 --- /dev/null +++ b/reactNextJS/addToServer.go @@ -0,0 +1,28 @@ +package reactNextJS + +import ( + "embed" + "fmt" + "io/fs" + "net/http" +) + +//go:embed "out/*" +var nextFiles embed.FS + +//go:embed "out/_next" +var nextScripts embed.FS + +// Call this from main once before starting the server +func AddNextStaticClient() { + scriptsSubFolder, err := fs.Sub(nextScripts, "out") + if err != nil { + panic(fmt.Sprint("Error: Could not find \"reactNextJS/out/\". Did you build the reactNextJS client?")) + } + filesSubFolder, _ := fs.Sub(nextFiles, "out") + var nextScriptsServer = http.FileServerFS(scriptsSubFolder) + var nextFilesServer = http.FileServerFS(filesSubFolder) + + http.Handle("/reactNextJS/", http.StripPrefix("/reactNextJS/", nextFilesServer)) + http.Handle("/_next/", nextScriptsServer) +} diff --git a/server.go b/server.go new file mode 100644 index 0000000..25df7b4 --- /dev/null +++ b/server.go @@ -0,0 +1,31 @@ +package main + +import ( + "embed" + "fmt" + "frontends/reactNextJS" + "net/http" +) + +const PORT = 3003 + +//go:embed "vanillaJS" +var vanillaJS embed.FS + +//go:embed "react" +var react embed.FS + +//go:embed "reactNextJS/out" +var nextStatic embed.FS + +func main() { + + http.Handle("/vanillaJS/", http.FileServerFS(vanillaJS)) + http.Handle("/react/", http.FileServerFS(react)) + reactNextJS.AddNextStaticClient() + + err := http.ListenAndServe(fmt.Sprintf(":%d", PORT), nil) + if err != nil { + panic(fmt.Sprintf("Error starting server: %s", err)) + } +}