UNPKG

@coin9/rn-cli

Version:

A scaffording based on rn-cli

116 lines (107 loc) 3.05 kB
#!/usr/bin/env node const fs = require('fs') const program = require('commander') const download = require('download-git-repo') const handlebars = require('handlebars') const inquirer = require('inquirer') const ora = require('ora') const chalk = require('chalk') const symbols = require('log-symbols') const shell = require('shelljs') const getGitUser = require('../lib/git-user') const outPutList = require('../lib/output-list') const outPutHelp = require('../lib/output-help') const outPutCliList = require('../lib/outout-cli-list') const pkgJson = require('../package.json') var author = getGitUser() || '' if (process.argv.length <= 2) { outPutHelp() } if (process.argv[2] == 'init' && !process.argv[3]) { console.log(chalk.red('Maybe you need to initialize the project. Please input it as follows:')) console.log('wwvue init project-name') process.exit(1) } const promptList = [ { name: 'description', message: 'Project description:', default: 'rn project', }, { name: 'author', message: 'Project author:', default: author, }, { message: 'PackagePrefix:', name: 'packPrefix', default: 'rn-cli', }, { type: 'list', message: 'choose a template:', name: 'templateType', default: 'reactnative', choices: [ { key: 'reactnative', value: 'reactnative', }, { key: 'ts', value: 'ts', }, ], }, ] // 从github上面download模版 program .version(`rn-cli${pkgJson.version}`, '-v, --version') .command('init <name>') .action((name) => { if (!fs.existsSync(name)) { inquirer.prompt(promptList).then((answers) => { const spinner = ora('Downloading template,please wait...') spinner.start() download(`https://github.com:yinlingchaoliu/template-${answers.templateType}#main`, name, { clone: true }, (err) => { if (err) { spinner.fail() console.log(symbols.error, chalk.red(err)) } else { spinner.succeed() const fileName = `${name}/package.json` const meta = { name: name, description: answers.description, author: answers.author, packPrefix: answers.packPrefix, } if (fs.existsSync(fileName)) { const content = fs.readFileSync(fileName).toString() const result = handlebars.compile(content)(meta) fs.writeFileSync(fileName, result) } console.log(symbols.success, chalk.green('Project initialization complete')) console.log('this project cli example:') outPutCliList() console.log(chalk.green('Wish you a smooth development!!!')) } }) }) } else { console.log(symbols.error, chalk.red('Project already exists')) } }) program .command('copy <name>') .description('copy template to project') .action((name) => { if (name !== '') { shell.mv(`${name}/*`, '.') shell.rm('-rf', `${name}`) } }) program.command('list').alias('ls').description('View all available templates').action(outPutList) program.command('help').alias('h').description('View help').action(outPutHelp) program.parse(process.argv)