cra-structure-cli
Version:
A CLI with bootstrap create-react-app. Initiate react project. V2.0 supported typescript.
77 lines (71 loc) • 2.12 kB
JavaScript
import arg from 'arg';
import inquirer from 'inquirer';
import { createProject } from './main';
// function parseArgumentsIntoOptions(rawArgs) {
// const args = arg({
// '--git': Boolean,
// '--yes': Boolean,
// '--install': Boolean,
// '-g': '--git',
// '-y': '--yes',
// '-i': '--install',
// }, {
// argv: rawArgs.slice(2),
// });
// return {
// skipPrompts: args['--yes'] || false,
// git: args['--git'] || false,
// template: args._[0],
// runInstall: args['--install'] || false,
// }
// }
function parseArgumentsIntoOptions(rawArgs) {
const args = arg({
'--typescript': Boolean,
'-ts': '--typescript'
}, {
argv: rawArgs.slice(2),
});
return {
projectName: args._[0] || 'my-app',
typeScript: args['--typescript'] || false,
}
}
async function promptForMissingOptions(options) {
const defaultTemplate = 'JavaScript';
if (options.skipPrompts) {
return {
...options,
template: options.template || defaultTemplate,
};
}
const questions = [];
if (!options.template) { // if no template
questions.push({
type: 'list',
name: 'template',
message: 'Please choose which project template to use',
choices: ['JavaScript', 'TypeScript'],
default: defaultTemplate,
});
}
if (!options.git) {
questions.push({
type: 'confirm',
name: 'git',
message: 'Initialize a git repository?',
default: false,
});
}
const answers = await inquirer.prompt(questions);
return {
...options,
template: options.template || answers.template,
git: options.git || answers.git,
};
}
export async function cli(args) {
let options = parseArgumentsIntoOptions(args);
// options = await promptForMissingOptions(options);
await createProject(options);
}