feat: Install NPM Package

This commit is contained in:
Lea Anthony
2019-10-24 15:29:09 +11:00
parent cfc0cc053b
commit 1d785d7d40
4 changed files with 70 additions and 9 deletions

View File

@@ -100,6 +100,19 @@ func (p *ProgramHelper) InstallGoPackage(packageName string) error {
return err
}
// InstallNPMPackage installs the given npm package
func (p *ProgramHelper) InstallNPMPackage(packageName string, save bool) error {
args := strings.Split("install "+packageName, " ")
if save {
args = append(args, "--save")
}
_, stderr, err := p.shell.Run("npm", args...)
if err != nil {
fmt.Println(stderr)
}
return err
}
// RunCommand runs the given command
func (p *ProgramHelper) RunCommand(command string) error {
args := strings.Split(command, " ")

View File

@@ -13,12 +13,16 @@ import (
"github.com/leaanthony/slicer"
)
// PackageManager indicates different package managers
type PackageManager int
const (
unknown PackageManager = iota
npm
yarn
// UNKNOWN package manager
UNKNOWN PackageManager = iota
// NPM package manager
NPM
// YARN package manager
YARN
)
type author struct {
@@ -161,20 +165,21 @@ func (po *ProjectOptions) Defaults() {
po.WailsVersion = Version
}
// GetNPMBinaryName returns the type of package manager used by the project
func (po *ProjectOptions) GetNPMBinaryName() (PackageManager, error) {
if po.FrontEnd == nil {
return unknown, fmt.Errorf("No frontend specified in project options")
return UNKNOWN, fmt.Errorf("No frontend specified in project options")
}
if strings.Index(po.FrontEnd.Install, "npm") > -1 {
return npm, nil
return NPM, nil
}
if strings.Index(po.FrontEnd.Install, "yarn") > -1 {
return yarn, nil
return YARN, nil
}
return unknown, nil
return UNKNOWN, nil
}
// PromptForInputs asks the user to input project details

View File

@@ -20,6 +20,7 @@ var checkSpinner = spinner.NewSpinner()
var migrateProjectOptions = &cmd.ProjectOptions{}
var migrateFS = cmd.NewFSHelper()
var migrateGithub = cmd.NewGitHubHelper()
var programHelper = cmd.NewProgramHelper()
var lessThanV1 *semver.Constraints
// The user's go.mod
@@ -30,6 +31,9 @@ var goModFile string
var mainJSFile string
var mainJSContents string
// Frontend directory
var frontEndDir string
func init() {
var dryrun bool
@@ -147,6 +151,12 @@ func init() {
}
}
// Install runtime
err = installWailsRuntime()
if err != nil {
return err
}
return nil
})
}
@@ -230,7 +240,7 @@ func checkWailsBridge() (string, error) {
return "", fmt.Errorf("Unable to determine frontend directory")
}
frontEndDir := migrateProjectOptions.FrontEnd.Dir
frontEndDir = migrateProjectOptions.FrontEnd.Dir
wailsBridgePath, err := filepath.Abs(filepath.Join(".", frontEndDir, "src", "wailsbridge.js"))
if err != nil {
@@ -263,7 +273,7 @@ func checkMainJS() (bool, error) {
return false, fmt.Errorf("Unable to determine frontend directory")
}
frontEndDir := migrateProjectOptions.FrontEnd.Dir
frontEndDir = migrateProjectOptions.FrontEnd.Dir
mainJSFile, err = filepath.Abs(filepath.Join(".", frontEndDir, "src", "main.js"))
if err != nil {
@@ -360,3 +370,34 @@ func patchMainJS() error {
checkSpinner.Success()
return nil
}
func installWailsRuntime() error {
checkSpinner.Start("Installing @wailsapp/runtime module")
// Change to the frontend directory
err := os.Chdir(frontEndDir)
if err != nil {
checkSpinner.Error()
return nil
}
// Determine package manager
packageManager, err := migrateProjectOptions.GetNPMBinaryName()
if err != nil {
checkSpinner.Error()
return nil
}
switch packageManager {
case cmd.NPM:
// npm install --save @wailsapp/runtime
programHelper.InstallNPMPackage("@wailsapp/runtime", true)
default:
checkSpinner.Error()
return fmt.Errorf("Unknown package manager")
}
checkSpinner.Success()
return nil
}

2
go.mod
View File

@@ -29,3 +29,5 @@ require (
gopkg.in/AlecAivazis/survey.v1 v1.8.4
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
)
go 1.13