90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"io"
|
|
"io/fs"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"trle5.xyz/gopkg/tplate/src/page"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// embedWebFS 打包了 web 目录下的全部文件
|
|
//go:embed web
|
|
var embedWebFS embed.FS
|
|
|
|
func main() {
|
|
// 修改 zerolog 的默认 logger
|
|
log.Logger = zerolog.New(zerolog.ConsoleWriter{
|
|
Out: os.Stdout,
|
|
TimeFormat: "15:04:05",
|
|
// TimeFormat: "2006/01/02 15:04:05",
|
|
}).With().Timestamp().Logger()
|
|
|
|
if len(os.Args) > 1 && os.Args[1] == "extract" {
|
|
err := extractFS()
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("extractFS failed")
|
|
}
|
|
return
|
|
}
|
|
|
|
var buildMode bool
|
|
if len(os.Args) > 1 && os.Args[1] == "build" {
|
|
buildMode = true
|
|
}
|
|
|
|
p := page.New(&page.NewPageParams{
|
|
BuildMode: buildMode,
|
|
EmbedFS: embedWebFS,
|
|
})
|
|
|
|
if buildMode {
|
|
p.BuildHandler(len(os.Args) > 2 && os.Args[2] == "--keep")
|
|
} else {
|
|
http.HandleFunc("/", p.ServerHandler)
|
|
log.Info().
|
|
Str("URL", "http://localhost:8080").
|
|
Msg("Debug server started")
|
|
err := http.ListenAndServe(":8080", nil)
|
|
log.Fatal().Err(err).Msg("Debug server stopped")
|
|
}
|
|
}
|
|
|
|
func extractFS() error {
|
|
return fs.WalkDir(embedWebFS, ".", func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !d.IsDir() {
|
|
err = os.MkdirAll(filepath.Dir(path), 0755)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
file, err := embedWebFS.Open(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer file.Close()
|
|
|
|
out, err := os.Create(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer out.Close()
|
|
|
|
_, err = io.Copy(out, file)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|