rsnext/packages/create-next-app/lib/utils/install.js
Joe Haddad 4eb8aba692
Add Create Next App package (#8018)
* Add Create Next App package

* Fix Create Next App tests

* Fix company name

* Update package.json
2019-07-17 16:53:56 -04:00

52 lines
1.5 KiB
JavaScript

const execa = require('execa')
const Promise = require('promise')
const messages = require('../messages')
const getInstallCmd = require('./get-install-cmd')
const output = require('./output')
module.exports = function install (opts) {
const projectName = opts.projectName
const projectPath = opts.projectPath
const packages = opts.packages || []
if (packages.length === 0) {
console.log('Missing packages in `install`, try running again.')
process.exit(1)
}
const installCmd = getInstallCmd()
const installArgs = getInstallArgs(installCmd, packages)
console.log(messages.installing(packages))
process.chdir(projectPath)
return new Promise(function (resolve, reject) {
const stopInstallSpinner = output.wait('Installing modules')
execa(installCmd, installArgs)
.then(function () {
// Confirm that all dependencies were installed
return execa(installCmd, ['install'])
})
.then(function () {
stopInstallSpinner()
output.success(`Installed dependencies for ${projectName}`)
resolve()
})
.catch(function () {
stopInstallSpinner()
console.log(messages.installError(packages))
return reject(new Error(`${installCmd} installation failed`))
})
})
}
function getInstallArgs (cmd, packages) {
if (cmd === 'npm') {
const args = ['install', '--save', '--save-exact']
return args.concat(packages, ['--verbose'])
} else if (cmd === 'yarn') {
const args = ['add']
return args.concat(packages)
}
}