1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const fs = require('fs-extra')
- const path = require('path')
- const inquirer = require('inquirer')
- const Creator = require('./Creator')
- const { clearConsole } = require('./util/clearConsole')
- const { getPromptModules } = require('./util/createTools')
- const { chalk, error, stopSpinner, exit } = require('@vue/cli-shared-utils')
- const validateProjectName = require('validate-npm-package-name')
- async function create (projectName, options) {
- if (options.proxy) {
- process.env.HTTP_PROXY = options.proxy
- }
- const cwd = options.cwd || process.cwd()
- const inCurrent = projectName === '.'
- const name = inCurrent ? path.relative('../', cwd) : projectName
- const targetDir = path.resolve(cwd, projectName || '.')
- const result = validateProjectName(name)
- if (!result.validForNewPackages) {
- console.error(chalk.red(`Invalid project name: "${name}"`))
- result.errors && result.errors.forEach(err => {
- console.error(chalk.red.dim('Error: ' + err))
- })
- result.warnings && result.warnings.forEach(warn => {
- console.error(chalk.red.dim('Warning: ' + warn))
- })
- exit(1)
- }
- if (fs.existsSync(targetDir) && !options.merge) {
- if (options.force) {
- await fs.remove(targetDir)
- } else {
- await clearConsole()
- if (inCurrent) {
- const { ok } = await inquirer.prompt([
- {
- name: 'ok',
- type: 'confirm',
- message: `Generate project in current directory?`
- }
- ])
- if (!ok) {
- return
- }
- } else {
- 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') {
- console.log(`\nRemoving ${chalk.cyan(targetDir)}...`)
- await fs.remove(targetDir)
- }
- }
- }
- }
- const creator = new Creator(name, targetDir, getPromptModules())
- await creator.create(options)
- }
- module.exports = (...args) => {
- return create(...args).catch(err => {
- stopSpinner(false) // do not persist
- error(err)
- if (!process.env.VUE_CLI_TEST) {
- process.exit(1)
- }
- })
- }
|