github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/genny/build/assets.go (about) 1 package build 2 3 import ( 4 "bytes" 5 "os/exec" 6 "path/filepath" 7 8 "github.com/gobuffalo/buffalo/genny/assets/webpack" 9 "github.com/gobuffalo/envy" 10 "github.com/gobuffalo/genny/v2" 11 12 "github.com/gobuffalo/packr/v2/jam" 13 "github.com/gobuffalo/packr/v2/jam/parser" 14 ) 15 16 func assets(opts *Options) (*genny.Generator, error) { 17 g := genny.New() 18 19 if err := opts.Validate(); err != nil { 20 return g, err 21 } 22 23 if opts.App.WithNodeJs || opts.App.WithWebpack { 24 if opts.CleanAssets { 25 g.RunFn(func(r *genny.Runner) error { 26 r.Delete(filepath.Join(opts.App.Root, "public", "assets")) 27 return nil 28 }) 29 } 30 g.RunFn(func(r *genny.Runner) error { 31 r.Logger.Debugf("setting NODE_ENV = %s", opts.Environment) 32 return envy.MustSet("NODE_ENV", opts.Environment) 33 }) 34 g.RunFn(func(r *genny.Runner) error { 35 tool := "yarnpkg" 36 if !opts.App.WithYarn { 37 tool = "npm" 38 } 39 40 c := exec.CommandContext(r.Context, tool, "run", "build") 41 if _, err := opts.App.NodeScript("build"); err != nil { 42 // Fallback on legacy runner 43 c = exec.CommandContext(r.Context, webpack.BinPath) 44 } 45 46 bb := &bytes.Buffer{} 47 c.Stdout = bb 48 c.Stderr = bb 49 50 if err := r.Exec(c); err != nil { 51 r.Logger.Error(bb.String()) 52 return err 53 } 54 return nil 55 56 }) 57 } 58 59 g.RunFn(func(r *genny.Runner) error { 60 ro := &parser.RootsOptions{} 61 62 if !opts.WithAssets { 63 ro.Ignores = append(ro.Ignores, "public/assets") 64 } 65 66 opts := jam.PackOptions{ 67 Roots: []string{opts.App.Root}, 68 RootsOptions: ro, 69 } 70 return jam.Pack(opts) 71 }) 72 73 if opts.ExtractAssets && opts.WithAssets { 74 // mount the archived assets generator 75 aa, err := archivedAssets(opts) 76 if err != nil { 77 return g, err 78 } 79 g.Merge(aa) 80 } 81 82 return g, nil 83 }