Build frontends with the expected base url
This commit is contained in:
parent
86eac30d5e
commit
1b760329ef
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,4 @@
|
||||
tmp
|
||||
server
|
||||
dist
|
||||
index.html
|
||||
|
||||
64
Makefile
64
Makefile
@ -20,47 +20,43 @@ svelte: svelte/dist/*
|
||||
cleanSvelte:
|
||||
rm -rf ./svelte/dist
|
||||
|
||||
cleanbuild:
|
||||
rm -rf tmp/build
|
||||
tmp/build: cleanbuild
|
||||
mkdir -p tmp/build
|
||||
tmp/build/vanillaJS: tmp/build vanillaJS/index.html
|
||||
mkdir tmp/build/vanillaJS && \
|
||||
cp ./vanillaJS/index.html ./tmp/build/vanillaJS
|
||||
tmp/build/react: tmp/build react/index.html
|
||||
mkdir tmp/build/react && \
|
||||
cp ./react/index.html ./tmp/build/react/
|
||||
tmp/build/alpinejs: alpinejs/index.html
|
||||
mkdir tmp/build/alpinejs && \
|
||||
cp ./alpinejs/index.html ./tmp/build/alpinejs
|
||||
tmp/build/_next: tmp/build reactNextJS/out/*
|
||||
mkdir ./tmp/build/_next && \
|
||||
cp -r ./reactNextJS/out/_next ./tmp/build/
|
||||
tmp/build/reactNextJS: tmp/build reactNextJS/out/*
|
||||
mkdir ./tmp/build/reactNextJS && \
|
||||
cp ./reactNextJS/out/*.* ./tmp/build/reactNextJS/
|
||||
tmp/build/assets: tmp/build svelte/dist/* vuejs/dist/*
|
||||
mkdir tmp/build/assets && \
|
||||
cp svelte/dist/assets/* tmp/build/assets/ && \
|
||||
cp vuejs/dist/assets/* tmp/build/assets/
|
||||
tmp/build/vuejs: tmp/build vuejs/dist/*
|
||||
mkdir ./tmp/build/vuejs && \
|
||||
cp ./vuejs/dist/*.* ./tmp/build/vuejs/
|
||||
tmp/build/svelte: tmp/build svelte/dist/*
|
||||
mkdir ./tmp/build/svelte && \
|
||||
cp -r ./svelte/dist/* ./tmp/build/svelte/
|
||||
tmp/build/index.html: tmp/build index.html
|
||||
cp index.html tmp/build/
|
||||
cleandist:
|
||||
rm -rf dist
|
||||
dist:
|
||||
mkdir -p dist
|
||||
dist/vanillaJS: dist vanillaJS/index.html
|
||||
rm -rf dist/vanillaJS && \
|
||||
cp -r ./vanillaJS ./dist/vanillaJS
|
||||
dist/react: dist react/index.html
|
||||
rm -rf dist/react && \
|
||||
cp -r ./react ./dist/react
|
||||
dist/alpinejs: dist alpinejs/index.html
|
||||
rm -rf dist/alpinejs && \
|
||||
cp -r ./alpinejs ./dist/alpinejs
|
||||
dist/reactNextJS: dist reactNextJS/out/*
|
||||
rm -rf ./dist/reactNextJS && \
|
||||
cp -r ./reactNextJS/out ./dist/reactNextJS
|
||||
dist/vuejs: dist vuejs/dist/*
|
||||
rm -rf ./dist/vuejs && \
|
||||
cp -r ./vuejs/dist ./dist/vuejs
|
||||
dist/svelte: dist svelte/dist/*
|
||||
rm -rf ./dist/svelte && \
|
||||
cp -r ./svelte/dist ./dist/svelte
|
||||
dist/index.html: dist index.tmpl
|
||||
go run server.go generate
|
||||
mv index.html dist/
|
||||
|
||||
web: tmp/build/assets tmp/build/vanillaJS tmp/build/react tmp/build/alpinejs tmp/build/_next tmp/build/reactNextJS tmp/build/assets tmp/build/vuejs tmp/build/svelte tmp/build/index.html
|
||||
export: dist/vanillaJS dist/react dist/alpinejs dist/reactNextJS dist/assets dist/vuejs dist/svelte dist/index.html
|
||||
web: ./svelte/dist/* ./vuejs/dist/* ./reactNextJS/out/* vanillaJS/index.html react/index.html alpinejs/index.html
|
||||
build: web server.go
|
||||
go build server.go
|
||||
run: web server.go
|
||||
go run server.go
|
||||
air: nil web server.go
|
||||
air server.go
|
||||
clean: cleanNext cleanVue cleanSvelte
|
||||
clean: cleanNext cleanVue cleanSvelte cleandist
|
||||
rm -rf tmp
|
||||
rm -f server
|
||||
rm -f index.html
|
||||
|
||||
.PHONY: all build clean cleanbuild nextjs vuejs svelte run air nil web
|
||||
.PHONY: all build clean cleanbuild nextjs vuejs svelte run air nil web export
|
||||
|
||||
13
index.html
13
index.html
@ -1,13 +0,0 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>Frontends</h1>
|
||||
<ul>
|
||||
<li><a href="vanillaJS/">JS Only</a></li>
|
||||
<li><a href="react/">React</a></li>
|
||||
<li><a href="reactNextJS/">React (with Next)</a></li>
|
||||
<li><a href="alpinejs/">Alpine.js</a></li>
|
||||
<li><a href="svelte/">Svelte</a></li>
|
||||
<li><a href="vuejs/">Vue.js</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
10
index.tmpl
Normal file
10
index.tmpl
Normal file
@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<body>
|
||||
<h1>Frontends</h1>
|
||||
<ul>
|
||||
{{range .}}
|
||||
<li><a href="{{.Mountpoint}}">{{.Name}}</a></li>
|
||||
{{end}}
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
@ -3,6 +3,7 @@
|
||||
*/
|
||||
const nextConfig = {
|
||||
output: 'export',
|
||||
basePath: '/reactNextJS',
|
||||
|
||||
// Optional: Change links `/me` -> `/me/` and emit `/me.html` -> `/me/index.html`
|
||||
// trailingSlash: true,
|
||||
|
||||
66
server.go
66
server.go
@ -3,21 +3,77 @@ package main
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
const PORT = 3003
|
||||
|
||||
//go:embed "all:tmp/build"
|
||||
var webfs embed.FS
|
||||
type frontendInfo struct {
|
||||
Name, Mountpoint string
|
||||
}
|
||||
|
||||
//go:embed "all:vuejs/dist"
|
||||
var vueFiles embed.FS
|
||||
|
||||
//go:embed "all:reactNextJS/out"
|
||||
var nextFiles embed.FS
|
||||
|
||||
//go:embed "all:svelte/dist"
|
||||
var svelteFiles embed.FS
|
||||
|
||||
//go:embed "vanillaJS"
|
||||
var vanillaFiles embed.FS
|
||||
|
||||
//go:embed "alpinejs"
|
||||
var alpineFiles embed.FS
|
||||
|
||||
//go:embed "react"
|
||||
var reactFiles embed.FS
|
||||
|
||||
func addFrontend(files embed.FS, mountpoint string, subfs string, name string) frontendInfo {
|
||||
subFiles, _ := fs.Sub(files, subfs)
|
||||
fileServer := http.FileServerFS(subFiles)
|
||||
http.Handle(mountpoint, http.StripPrefix(mountpoint, fileServer))
|
||||
return frontendInfo{name, mountpoint}
|
||||
}
|
||||
|
||||
func outputIndexAndExit(indexTemplate template.Template, frontends []frontendInfo) {
|
||||
file, err := os.OpenFile("index.html", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
||||
if err != nil {
|
||||
panic(err) // Handle error
|
||||
}
|
||||
defer file.Close()
|
||||
indexTemplate.Execute(file, frontends)
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func main() {
|
||||
webfs, err := fs.Sub(webfs, "tmp/build")
|
||||
args := os.Args
|
||||
|
||||
home_template, err := template.ParseFiles("index.tmpl")
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("Error embeding web files: %s\nTry running \"make web\"", err))
|
||||
panic(fmt.Sprintf("Error parsing homepage template\n%s", err))
|
||||
}
|
||||
http.Handle("/", http.FileServerFS(webfs))
|
||||
|
||||
frontends := []frontendInfo{
|
||||
addFrontend(vanillaFiles, "/vanillaJS/", "vanillaJS", "JS Only"),
|
||||
addFrontend(alpineFiles, "/alpinejs/", "alpinejs", "Alpine.js"),
|
||||
addFrontend(reactFiles, "/react/", "react", "React"),
|
||||
addFrontend(nextFiles, "/reactNextJS/", "reactNextJS/out", "React (Next.js)"),
|
||||
addFrontend(vueFiles, "/vuejs/", "vuejs/dist", "Vue.js"),
|
||||
addFrontend(svelteFiles, "/svelte/", "svelte/dist", "Svelte"),
|
||||
}
|
||||
|
||||
if len(args) == 2 && args[1] == "generate" {
|
||||
outputIndexAndExit(*home_template, frontends)
|
||||
}
|
||||
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
err = home_template.Execute(w, frontends)
|
||||
})
|
||||
|
||||
err = http.ListenAndServe(fmt.Sprintf(":%d", PORT), nil)
|
||||
if err != nil {
|
||||
|
||||
@ -4,4 +4,5 @@ import { svelte } from '@sveltejs/vite-plugin-svelte'
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [svelte()],
|
||||
base: '/svelte/'
|
||||
})
|
||||
|
||||
@ -14,5 +14,6 @@ export default defineConfig({
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||
}
|
||||
}
|
||||
},
|
||||
base: '/vuejs/'
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user