infra-cli
Version:
63 lines (53 loc) • 2 kB
JavaScript
const semver = require('semver')
const path = require('path')
const fs = require('fs-extra')
const chalk = require('chalk')
const { checkAppName, isSafeToCreateProjectIn } = require('./util/utils')
const generatorProjectFromCustom = require('./generatorProjectFromCustom')
const generatorProjectFromUrl = require('./generatorProjectFromUrl')
const generatorProjectFromCache = require('./generatorProjectFromCache')
const wrapLoading = require('./wrapLoading')
const generatorProjectFromTemplate = require('./generatorProjectFromTemplate')
const generatorBackendProjectFromTemplate = require('./generatorBackendProjectFromTemplate')
async function createProjectDir (name, force) {
try {
if (force) {
await fs.emptyDir(name)
} else {
fs.ensureDirSync(name)
}
} catch (error) {
console.error(chalk.redBright(error))
}
}
module.exports = async function create (name, options) {
const { template, clone, force, cache, templateBe } = options
const unsupportedNodeVersion = !semver.satisfies(process.version, '>=8.10.0')
if (unsupportedNodeVersion) {
console.log(
chalk.yellow(
`You are using Node ${process.version} so the project will be bootstrapped with an old unsupported version of tools.\n\n` +
'Please update to Node 8.10 or higher for a better, fully supported experience.\n'
)
)
}
const root = path.resolve(name)
const appName = path.basename(root)
checkAppName(appName)
await wrapLoading(createProjectDir, 'creating dir ...', name, force)
if (!isSafeToCreateProjectIn(root, name)) {
process.exit(1)
}
// process.chdir(root)
if (clone) {
generatorProjectFromUrl(name, root, clone)
} else if (template) {
generatorProjectFromTemplate(name, root, template)
} else if (cache) {
generatorProjectFromCache(name, root, cache)
} else if (templateBe) {
generatorBackendProjectFromTemplate(name, root, templateBe)
} else {
generatorProjectFromCustom(name, root)
}
}