github.com/mayra-cabrera/buffalo@v0.9.4-0.20170814145312-66d2e7772f11/generators/assets/webpack/webpack.go (about) 1 package webpack 2 3 import ( 4 "fmt" 5 "os/exec" 6 "path/filepath" 7 8 "github.com/gobuffalo/buffalo/generators" 9 "github.com/gobuffalo/buffalo/generators/assets" 10 "github.com/gobuffalo/buffalo/generators/assets/standard" 11 "github.com/gobuffalo/makr" 12 "github.com/pkg/errors" 13 ) 14 15 var logo = &makr.RemoteFile{ 16 File: makr.NewFile("assets/images/logo.svg", ""), 17 RemotePath: assets.LogoURL, 18 } 19 20 // BinPath is the path to the local install of webpack 21 var BinPath = filepath.Join("node_modules", ".bin", "webpack") 22 23 // New webpack generator 24 func New(data makr.Data) (*makr.Generator, error) { 25 g := makr.New() 26 27 // if there's no npm, return! 28 _, err := exec.LookPath("npm") 29 if err != nil { 30 fmt.Println("Could not find npm/node. Skipping webpack generation.") 31 32 wg, err := standard.New(data) 33 if err != nil { 34 return g, errors.WithStack(err) 35 } 36 return wg, nil 37 } 38 39 command := "npm" 40 args := []string{"install", "--no-progress", "--save"} 41 if b, ok := data["withYarn"].(bool); ok && b { 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", "--no-progress", "-y")) 62 g.Add(c) 63 64 modules := []string{ 65 "webpack@~2.3.0", 66 "sass-loader@~6.0.5", 67 "css-loader@~0.28.4", 68 "expose-loader@~0.7.3", 69 "style-loader@~0.18.2", 70 "node-sass@~4.5.3", 71 "extract-text-webpack-plugin@2.1.2", 72 "babel-cli@~6.24.1", 73 "babel-core@~6.25.0", 74 "babel-preset-env@~1.5.2", 75 "babel-loader@~7.0.0", 76 "url-loader@~0.5.9", 77 "file-loader@~0.11.2", 78 "jquery@~3.2.1", 79 "bootstrap@~3.3.7", 80 "path@~0.12.7", 81 "font-awesome@~4.7.0", 82 "npm-install-webpack-plugin@4.0.4", 83 "jquery-ujs@~1.2.2", 84 "copy-webpack-plugin@~4.0.1", 85 "uglifyjs-webpack-plugin@~0.4.6", 86 } 87 88 args = append(args, modules...) 89 g.Add(makr.NewCommand(exec.Command(command, args...))) 90 return g, nil 91 } 92 93 func generateYarn(data makr.Data) error { 94 // if there's no yarn, install it! 95 _, err := exec.LookPath("yarn") 96 // A new makr is necessary to have yarn available in path 97 if err != nil { 98 yg := makr.New() 99 yargs := []string{"install", "-g", "yarn"} 100 yg.Add(makr.NewCommand(exec.Command("npm", yargs...))) 101 err = yg.Run(".", data) 102 if err != nil { 103 return err 104 } 105 } 106 return nil 107 }