feat(app): static file serving
This commit is contained in:
60
app/app.go
Normal file
60
app/app.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"forge.capytal.company/capytalcode/project-comicverse/pages"
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
dev bool
|
||||
port int
|
||||
assets http.Handler
|
||||
}
|
||||
|
||||
type AppOpts struct {
|
||||
Dev *bool
|
||||
Port *int
|
||||
Assets http.Handler
|
||||
}
|
||||
|
||||
func NewApp(opts ...AppOpts) *App {
|
||||
if len(opts) == 0 {
|
||||
opts[0] = AppOpts{}
|
||||
}
|
||||
|
||||
if opts[0].Dev == nil {
|
||||
d := false
|
||||
opts[0].Dev = &d
|
||||
}
|
||||
|
||||
if opts[0].Port == nil {
|
||||
d := 8080
|
||||
opts[0].Port = &d
|
||||
}
|
||||
|
||||
if opts[0].Assets == nil {
|
||||
// d := http.Dir("./assets")
|
||||
// opts[0].Assets = d
|
||||
}
|
||||
|
||||
return &App{
|
||||
dev: *opts[0].Dev,
|
||||
port: *opts[0].Port,
|
||||
assets: opts[0].Assets,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) Run() {
|
||||
router := router.NewRouter()
|
||||
|
||||
router.HandleRoutes(pages.PAGES)
|
||||
router.Handle("/assets/", a.assets)
|
||||
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":%v", a.port), router); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
1
assets/js/hello.js
Normal file
1
assets/js/hello.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log("hello world");
|
||||
@@ -1,29 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
comicverse "forge.capytal.company/capytalcode/project-comicverse"
|
||||
)
|
||||
|
||||
var port *int
|
||||
|
||||
func init() {
|
||||
portEnv := os.Getenv("COMICVERSE_PORT")
|
||||
if portEnv == "" {
|
||||
portEnv = "8080"
|
||||
}
|
||||
p, err := strconv.Atoi(portEnv)
|
||||
if err != nil {
|
||||
p = 8080
|
||||
}
|
||||
|
||||
port = flag.Int("port", p, "The port to the server to listen on")
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
comicverse.Run(*port)
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package comicverse
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"forge.capytal.company/capytalcode/project-comicverse/pages"
|
||||
"forge.capytal.company/capytalcode/project-comicverse/router"
|
||||
)
|
||||
|
||||
func Run(port int) {
|
||||
router := router.NewRouter()
|
||||
|
||||
router.HandleRoutes(pages.PAGES)
|
||||
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
67
main.go
Normal file
67
main.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"flag"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"forge.capytal.company/capytalcode/project-comicverse/app"
|
||||
)
|
||||
|
||||
//go:embed assets
|
||||
var assetsFolder embed.FS
|
||||
|
||||
var (
|
||||
port *int
|
||||
dev *bool
|
||||
assets *string
|
||||
)
|
||||
|
||||
func init() {
|
||||
portEnv := os.Getenv("COMICVERSE_PORT")
|
||||
if portEnv == "" {
|
||||
portEnv = "8080"
|
||||
}
|
||||
p, err := strconv.Atoi(portEnv)
|
||||
if err != nil {
|
||||
p = 8080
|
||||
}
|
||||
port = flag.Int("port", p, "The port to the server to listen on")
|
||||
|
||||
devEnv := os.Getenv("COMICVERSE_DEV")
|
||||
if devEnv == "" {
|
||||
devEnv = "false"
|
||||
}
|
||||
d, err := strconv.ParseBool(devEnv)
|
||||
if err != nil {
|
||||
d = false
|
||||
}
|
||||
dev = flag.Bool("dev", d, "Run the application in development mode")
|
||||
|
||||
assetsEnv := os.Getenv("COMICVERSE_ASSETS")
|
||||
if assetsEnv == "" {
|
||||
assetsEnv = "./assets"
|
||||
}
|
||||
assets = flag.String("assets", assetsEnv, "The directory for the development assets")
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var assetsFS http.Handler
|
||||
if *dev {
|
||||
assetsFS = http.StripPrefix("/assets/", http.FileServer(http.Dir(*assets)))
|
||||
} else {
|
||||
assetsFS = http.FileServerFS(assetsFolder)
|
||||
}
|
||||
|
||||
app := app.NewApp(app.AppOpts{
|
||||
Port: port,
|
||||
Dev: dev,
|
||||
Assets: assetsFS,
|
||||
})
|
||||
|
||||
app.Run()
|
||||
}
|
||||
14
makefile
14
makefile
@@ -14,17 +14,18 @@ fmt:
|
||||
dev/templ:
|
||||
go run github.com/a-h/templ/cmd/templ@v0.2.707 generate --watch \
|
||||
--proxy=http://localhost:$(PORT) \
|
||||
--proxybind="0.0.0.0" \
|
||||
--open-browser=false
|
||||
|
||||
dev/server:
|
||||
go run github.com/air-verse/air@v1.52.2 \
|
||||
--build.cmd "go build -o tmp/bin/main ./cmd/serve" \
|
||||
--build.cmd "go build -o tmp/bin/main ." \
|
||||
--build.bin "tmp/bin/main" \
|
||||
--build.exclude_dir "node_modules" \
|
||||
--build.include_ext "go" \
|
||||
--build.stop_on_error "false" \
|
||||
--misc.clean_on_exit true \
|
||||
-- -port $(PORT)
|
||||
-- -dev -port $(PORT)
|
||||
|
||||
dev/sync_assets:
|
||||
go run github.com/air-verse/air@v1.52.2 \
|
||||
@@ -45,12 +46,17 @@ dev:
|
||||
build/templ:
|
||||
go run github.com/a-h/templ/cmd/templ@v0.2.707 generate
|
||||
|
||||
build/server:
|
||||
go build -o dist/server ./cmd/server
|
||||
build/app:
|
||||
go build -o dist/app .
|
||||
|
||||
build/assets:
|
||||
npx unocss
|
||||
|
||||
build: build/templ build/assets build/app
|
||||
|
||||
run: build
|
||||
./dist/app
|
||||
|
||||
clean:
|
||||
if [[ -d "dist" ]]; then rm -r ./dist; fi
|
||||
if [[ -d "tmp" ]]; then rm -r ./tmp; fi
|
||||
|
||||
Reference in New Issue
Block a user