@controlla/cli
Version:
Command line interface for rapid Controlla projects development
122 lines (106 loc) • 3.64 kB
JavaScript
const chalk = require('chalk')
const inquirer = require('inquirer')
const { clearConsole } = require('./util/clearConsole')
const shouldBackend = require('./util/shouldBackend')
const loadUserOptions = require('./loadUserOptions')
const { installDeps, installComposerDeps, injectedScripts } = require('./util/installDeps')
const { error, stopSpinner, log, hasYarn, hasPnpm3OrLater, logWithSpinner, execa } = require('@vue/cli-shared-utils')
async function start (options = {}, context = process.cwd()) {
const isTestOrDebug = process.env.CONTROLLA_CLI_TEST || process.env.CONTROLLA_CLI_DEBUG
const packageManagerChoices = []
await clearConsole(true)
packageManagerChoices.push({
name: 'Use NPM',
value: 'npm',
short: 'NPM'
})
// ask for packageManager once
if (hasYarn() || hasPnpm3OrLater()) {
if (hasYarn()) {
packageManagerChoices.push({
name: 'Use Yarn',
value: 'yarn',
short: 'Yarn'
})
}
if (hasPnpm3OrLater()) {
packageManagerChoices.push({
name: 'Use PNPM',
value: 'pnpm',
short: 'PNPM'
})
}
}
const packageManager = options.packageManager || await inquirer.prompt([
{
name: 'packageManager',
type: 'list',
message: 'Pick the package manager to use when installing dependencies:',
choices: packageManagerChoices
}
]).then(list => list.packageManager)
const userOptions = await loadUserOptions(context)
const isShouldBackend = await shouldBackend(userOptions.type)
// if (isShouldBackend) {
// log()
// logWithSpinner('🚧', 'Creating virtualhost...')
// //this.emit('creation', { event: 'creating-virtualhost' })
// await execa(`sudo sed -i -e "s/127.0.0.1\tlocalhost/127.0.0.1\tlocalhost\n127.0.0.1\t${userOptions.siteName}.test/g" /etc/hosts`, { cwd: this.context, shell: true}).then(_ => {
// stopSpinner()
// })
// }
// install plugins
stopSpinner()
log('🚀 Installing CLI plugins. This might take a while...')
log()
if (isTestOrDebug) {
// in development, avoid installation process
await require('./util/setupDevProject')(context)
} else {
for (const path of userOptions.frontends) {
await installDeps(`${context}/${path}`, packageManager, options.registry)
}
}
// install composer
if (isShouldBackend) {
log()
log(`🚀 Installing additional dependencies...`)
log()
await installDeps(context, packageManager, options.registry)
}
// install composer
if (isShouldBackend) {
log()
log(`🚀 Installing Composer dependencies...`)
log()
await installComposerDeps(context, 'composer')
}
// Injected additional scripts
if (isShouldBackend) {
log()
log(`📦 Injected additional scripts...`)
log()
await injectedScripts(context, 'composer')
}
// run complete cbs if any (injected by generators)
log()
logWithSpinner('⚓', `Running completion hooks...`)
await execa("find . -name '.controllaignore' -exec rename 's/controlla/git/' -- {} +", { cwd: this.context, shell: true })
stopSpinner()
log()
log(`🎉 Successfully started project ${chalk.yellow(userOptions.siteName)}.`)
log(
`👉 Get started with the following commands:\n\n` +
chalk.cyan(` ${chalk.gray('$')} ${packageManager === 'yarn' ? 'yarn serve' : packageManager === 'pnpm' ? 'pnpm run serve' : 'npm run serve'}`)
)
log()
}
module.exports = (...args) => {
return start(...args).catch(err => {
stopSpinner(false) // do not persist
error(err)
if (!process.env.CONTROLLA_CLI_TEST) {
process.exit(1)
}
})
}