github.com/corylanou/buffalo@v0.8.0/generators/assets/webpack/webpack.go (about) 1 package webpack 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 9 "github.com/gobuffalo/buffalo/generators" 10 "github.com/gobuffalo/buffalo/generators/assets" 11 "github.com/gobuffalo/makr" 12 ) 13 14 var logo = &makr.RemoteFile{ 15 File: makr.NewFile("assets/images/logo.svg", ""), 16 RemotePath: assets.LogoURL, 17 } 18 19 // BinPath is the path to the local install of webpack 20 var BinPath = filepath.Join("node_modules", ".bin", "webpack") 21 22 // New webpack generator 23 func New(data makr.Data) (*makr.Generator, error) { 24 g := makr.New() 25 26 // if there's no npm, return! 27 _, err := exec.LookPath("npm") 28 if err != nil { 29 fmt.Println("Could not find npm/node. Skipping webpack generation.") 30 return g, nil 31 } 32 33 command := "npm" 34 args := []string{"install", "--save"} 35 // If yarn.lock exists then yarn is used by default (generate webpack) 36 _, ferr := os.Stat("yarn.lock") 37 if ferr == nil { 38 data["withYarn"] = true 39 } 40 41 if _, ok := data["withYarn"]; ok { 42 command = "yarn" 43 args = []string{"add"} 44 err := generateYarn(data) 45 if err != nil { 46 return g, err 47 } 48 } 49 50 g.Add(logo) 51 52 files, err := generators.Find(filepath.Join("assets", "webpack")) 53 if err != nil { 54 return g, err 55 } 56 57 for _, f := range files { 58 g.Add(makr.NewFile(f.WritePath, f.Body)) 59 } 60 61 c := makr.NewCommand(exec.Command(command, "init", "-y")) 62 g.Add(c) 63 64 modules := []string{"webpack@~2.3.0", "sass-loader", "css-loader", "style-loader", "node-sass", 65 "babel-loader", "extract-text-webpack-plugin", "babel", "babel-core", "url-loader", "file-loader", 66 "jquery", "bootstrap", "path", "font-awesome", "npm-install-webpack-plugin", "jquery-ujs", 67 "copy-webpack-plugin", "expose-loader", 68 } 69 70 args = append(args, modules...) 71 g.Add(makr.NewCommand(exec.Command(command, args...))) 72 return g, nil 73 } 74 75 func generateYarn(data makr.Data) error { 76 // if there's no yarn, install it! 77 _, err := exec.LookPath("yarn") 78 // A new makr is necessary to have yarn available in path 79 if err != nil { 80 yg := makr.New() 81 yargs := []string{"install", "-g", "yarn"} 82 yg.Add(makr.NewCommand(exec.Command("npm", yargs...))) 83 err = yg.Run(".", data) 84 if err != nil { 85 return err 86 } 87 } 88 return nil 89 }