@lvl/wxapp-cli
Version:
wxapp-cli
89 lines (81 loc) • 2.29 kB
JavaScript
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)
})
}