infra-cli
Version:
57 lines (44 loc) • 1.55 kB
JavaScript
const inquirer = require('inquirer')
const fs = require('fs-extra')
const chalk = require('chalk')
const { runAdd } = require('./install')
const { cacheDir, copyCacheToProject } = require('./scripts/cache')
const { editPackageJson, getUserName } = require('./util/utils')
const wrapLoading = require('./wrapLoading')
async function generatorProjectFromCache (name, targetDir, cacheName) {
try {
if (!fs.existsSync(cacheDir)) {
console.error(chalk.redBright('There is no cache!'))
process.exit(1)
}
const readDir = fs.readdirSync(cacheDir)
const templateList = readDir.filter((item) => fs.statSync(`${cacheDir}/${item}`).isDirectory())
if (!templateList.length) {
console.error(chalk.redBright('There is no cache!'))
process.exit(1)
}
if (typeof cacheName !== 'string') {
const { template } = await inquirer.prompt({
name: 'template',
type: 'list',
choices: templateList,
message: 'Please choose a template to create project:',
pageSize: 10,
loop: false,
prefix: ''
})
cacheName = template
}
const { packageDependencies, packageDevDependencies } = await wrapLoading(
copyCacheToProject,
'coping ...',
cacheName,
targetDir
)
runAdd(targetDir, packageDependencies, packageDevDependencies)
await editPackageJson(targetDir, { name, author: getUserName() })
} catch (error) {
console.error(chalk.redBright(error))
}
}
module.exports = generatorProjectFromCache