UNPKG

@burnish/cli

Version:

a cli for creating vue / react / flutter projects

127 lines (126 loc) 5.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Ora_1 = __importDefault(require("Ora")); const fs_extra_1 = __importDefault(require("fs-extra")); const chalk_1 = __importDefault(require("chalk")); const figlet_1 = __importDefault(require("figlet")); const inquirer_1 = __importDefault(require("inquirer")); const log_symbols_1 = __importDefault(require("log-symbols")); const child_process_1 = __importDefault(require("child_process")); const utils_1 = require("../../utils"); const value_1 = __importDefault(require("../../value")); const createReactApp = (projectName, targetDir) => __awaiter(void 0, void 0, void 0, function* () { const { author, description, version, package_manager } = yield inquirer_1.default.prompt([ { type: 'input', name: 'description', message: 'Please input your project description', default: 'description', validate(val) { return true; } }, { type: 'input', name: 'author', message: 'Please input your author name', default: 'author', validate(val) { return true; }, transformer(val) { return val; } }, { type: 'input', name: 'version', message: 'Please input project version', default: '1.0.0', validate(val) { return true; }, transformer(val) { return val; } }, { type: 'list', name: 'package_manager', message: 'Which package manager do you want to use', default: 'Yarn', choices: ['Yarn', 'Npm'], validate(val) { return true; } } ]); // 一些提示 ··· console.log(chalk_1.default.white(`\n\n✨ Creating project in ${chalk_1.default.yellow(targetDir)}.`)); console.log(chalk_1.default.white(`\n🗃 Initializing git repository....\n`)); const spinner = Ora_1.default({ text: `Download template from burnish git repository... This might take a while....\n` }); spinner.start(); utils_1.downloadFromGithub(value_1.default.REACT, projectName) .then((res) => { fs_extra_1.default.readFile(`./${projectName}/package.json`, 'utf8', function (err, data) { if (err) { spinner.stop(); console.error(err); return; } const packageJson = JSON.parse(data); packageJson.name = projectName; packageJson.description = description; packageJson.author = author; packageJson.version = version; var updatePackageJson = JSON.stringify(packageJson, null, 2); fs_extra_1.default.writeFile(`./${projectName}/package.json`, updatePackageJson, 'utf8', function (err) { spinner.stop(); if (err) { console.error(err); } else { console.log(chalk_1.default.white(`📦 Installing additional dependencies...\n`)); // 将node工作目录更改成构建的项目根目录下 process.chdir(`./${projectName}`); // 安装项目依赖 if (package_manager === 'Yarn') { child_process_1.default.execSync('yarn', { stdio: [0, 1] }); } else { child_process_1.default.execSync('npm install', { stdio: [0] }); } // 依赖安装完成之后给出提示信息 console.log(chalk_1.default.white(`\n🎉 Successfully created project`), chalk_1.default.yellow(`${projectName}.`)); console.log(chalk_1.default.white('👉 Get started with the following commands:\n')); console.log(`${chalk_1.default.cyan(`${chalk_1.default.gray('$')} cd ${projectName}`)}`); console.log(package_manager === 'Yarn' ? chalk_1.default.cyan(`${chalk_1.default.gray('$')} yarn start\n\n`) : chalk_1.default.cyan(`${chalk_1.default.gray('$')} npm run start\n\n`)); console.log(chalk_1.default.white(figlet_1.default.textSync('burnish-cli'))); } process.exit(); }); }); }) .catch((err) => { console.log(log_symbols_1.default.error, err); spinner.fail(chalk_1.default.red('Sorry, it must be something error,please check it out. \n')); process.exit(-1); }); }); exports.default = createReactApp;