UNPKG

@lvl/wxapp-cli

Version:

wxapp-cli

89 lines (81 loc) 2.29 kB
const inquirer = require('inquirer') const path = require('path') const fse = require('fs-extra') const chalk = require('chalk') const pkg = require('../../package.json') const validateProjectName = require('validate-npm-package-name') const Creator = require('../services/creator.class') const { logWithSpinner, stopSpinner, log, error, clearConsole } = require('../utils') /** * 创建项目 * * */ async function create (appName, options) { const cwd = process.cwd() const inCurrent = appName === '.' const name = inCurrent ? path.relative('../', cwd) : appName const appRoot = path.resolve(cwd, appName) // 检测项目名称是否合法 const result = validateProjectName(name) if (!result.validForNewPackages) { console.error(chalk.red(`非法的项目名: "${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)) }) process.exit(1) } clearConsole() log('\n') log(`wxapp-cli@${pkg.version}`) log() // 检测路径是否已经存在 let res = fse.pathExistsSync(appRoot) if (res) { res = fse.readdirSync(appRoot) if (res && res.length) { const { action } = await inquirer.prompt([ { name: 'action', type: 'list', message: `项目目录 ${chalk.cyan(appRoot)} 已经存在,请选择以下操作:`, choices: [ { name: `删除`, value: 'overwrite' }, { name: `合并`, value: 'merge' }, { name: '取消', value: false } ] } ]) if (!action) { process.exit(1) } else if (action === 'overwrite') { log() logWithSpinner(`删除目录 ${chalk.cyan(appRoot)}`) fse.removeSync(appRoot) stopSpinner() log() } // error(`项目目录 <${appRoot}> 已经存在,请更换重试。\n`) // process.exit(1) } } // 开始创建项目 const creator = new Creator(name, appRoot) await creator.create(options) } module.exports = (...args) => { return create(...args).catch(err => { stopSpinner(false) error(err) process.exit(1) }) }