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  }