UNPKG

better-npm-init

Version:

A better version of npm init, with templates and more. Usage: better-npm-init <template> [--yarn] [--install] [--git] [--yes] [--help]

100 lines (91 loc) 2.89 kB
import { createProject } from './main'; import inquirer from 'inquirer'; import arg from 'arg'; function parseArgumentsIntoOptions(rawArgs) { const args = arg({ '--git': Boolean, '--yes': Boolean, '--install': Boolean, '--help': Boolean, '--yarn': Boolean, '-g': '--git', '-c': '--yes', '-i': '--install', '-h': '--help', '-y': '--yarn', }, { argv: rawArgs.slice(2), }); return { help: args['--help'] || false, skipPrompts: args['--yes'] || false, git: args['--git'] || false, template: args._[0], use_yarn: args['--yarn'] || false, runInstall: args['--install'] || false, }; } async function promptForMissingOptions(options) { const defaultPackageManager = 'NPM'; const defaultTemplate = 'javascript'; if (options.skipPrompts) { return { ...options, template: options.template || defaultTemplate, }; } if (options.help) { console.log(`Usage: better-npm-init <template> [--yarn] [--install] [--git] [--yes] [--help]`); return 'HELP_REQUESTED'; } const questions = []; if (!options.use_yarn) { questions.push({ type: 'list', name: 'use_yarn', message: 'Which package manager would you like to use?', choices: ['NPM', 'Yarn'], default: defaultPackageManager, }); } if (!options.template) { questions.push({ type: 'list', name: 'template', message: 'Please choose which project template to use', choices: ['JavaScript', 'TypeScript', 'Express', 'Next', 'Discord', 'React', 'Angular'], default: defaultTemplate, }); } if (!options.git) { questions.push({ type: 'confirm', name: 'git', message: 'Initialize a git repository?', default: false, }); } if (!options.runInstall) { questions.push({ type: 'confirm', name: 'install', message: 'Install dependencies?', default: false, }); } const answers = await inquirer.prompt(questions); return { ...options, template: options.template || answers.template, git: options.git || answers.git, runInstall: options.runInstall || answers.install, use_yarn: options.use_yarn || answers.use_yarn, }; } export async function cli(args) { let options = parseArgumentsIntoOptions(args); const prompt = await promptForMissingOptions(options); if (prompt === 'HELP_REQUESTED') return; options = prompt; await createProject(options); }