68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package frontend
|
|
|
|
import (
|
|
"errors"
|
|
"log"
|
|
|
|
"github.com/evanw/esbuild/pkg/api"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var FrontendCommand *cli.Command = &cli.Command{
|
|
Name: "frontend",
|
|
Description: "Build/watch frontend",
|
|
Action: func(c *cli.Context) error {
|
|
dev := c.Bool("dev")
|
|
watch := c.Bool("watch")
|
|
buildOpts := api.BuildOptions{
|
|
EntryPoints: []string{
|
|
"./web/src/index.js",
|
|
"./web/src/index.css",
|
|
"./web/src/index.html",
|
|
},
|
|
Outdir: "./web/dist",
|
|
Bundle: true,
|
|
Write: true,
|
|
MinifyWhitespace: !dev,
|
|
MinifyIdentifiers: !dev,
|
|
MinifySyntax: !dev,
|
|
JSX: api.JSXAutomatic,
|
|
Loader: map[string]api.Loader{
|
|
".js": api.LoaderJSX,
|
|
".css": api.LoaderCSS,
|
|
".html": api.LoaderCopy,
|
|
},
|
|
}
|
|
if watch {
|
|
ctx, err := api.Context(buildOpts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := ctx.Watch(api.WatchOptions{}); err != nil {
|
|
return err
|
|
}
|
|
log.Println("watching frontend")
|
|
<-c.Done()
|
|
} else {
|
|
if br := api.Build(buildOpts); br.Errors != nil {
|
|
for _, e := range br.Errors {
|
|
log.Println(e.Location, e.Detail, e.Text)
|
|
}
|
|
|
|
return errors.New("build failed")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
},
|
|
Flags: []cli.Flag{
|
|
&cli.BoolFlag{
|
|
Name: "dev",
|
|
Value: false,
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "watch",
|
|
Value: false,
|
|
},
|
|
},
|
|
}
|