Files
vue-cli/packages/@vue/cli/bin/vue-create
2018-01-01 01:23:00 -05:00

71 lines
1.7 KiB
JavaScript
Executable File

#!/usr/bin/env node
const {
warn,
error,
stopSpinner
} = require('@vue/cli-shared-utils')
const semver = require('semver')
const requiredVersion = require('../package.json').engines.node
if (!semver.satisfies(process.version, requiredVersion)) {
error(
`You are using Node ${process.version}, but this version of vue-cli ` +
`requires Node ${requiredVersion}.\nPlease upgrade your Node version.`
)
process.exit(1)
}
const fs = require('fs')
const path = require('path')
const chalk = require('chalk')
const rimraf = require('rimraf')
const inquirer = require('inquirer')
const program = require('commander')
const Creator = require('../lib/Creator')
const clearConsole = require('../lib/util/clearConsole')
async function create () {
program
.usage('<app-name>')
.parse(process.argv)
const projectName = program.args[0]
if (!projectName) {
warn(`\n Please provide an app name.`)
program.outputHelp()
process.exit(1)
}
const targetDir = path.resolve(process.cwd(), projectName)
if (fs.existsSync(targetDir)) {
clearConsole()
const { action } = await inquirer.prompt([
{
name: 'action',
type: 'list',
message: `Target directory ${chalk.cyan(targetDir)} already exists. Pick an action:`,
choices: [
{ name: 'Overwrite', value: 'overwrite' },
{ name: 'Merge', value: 'merge' },
{ name: 'Cancel', value: false }
]
}
])
if (!action) {
return
} else if (action === 'overwrite') {
rimraf.sync(targetDir)
}
}
const creator = new Creator(projectName, targetDir)
await creator.create()
}
create().catch(err => {
stopSpinner(false) // do not persist
error(err)
process.exit(1)
})