create-nodejs-express-project
Version:
A CLI for generating a new express project with the MVC structure
69 lines (62 loc) • 1.51 kB
JavaScript
import arg from "arg";
import inquirer from "inquirer";
import { createProject } from "../src/main.js";
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,
};
}
async function promptForMissingOptions(options) {
const defaultTemplate = "express";
if (options.skipPrompts) {
return {
...options,
template: options.template || defaultTemplate,
};
}
const questions = [];
if (!options.template) {
questions.push({
type: "list",
name: "template",
message: "Please choose which project template to use",
choices: ["express"],
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);
}