UNPKG

yst-react-cli

Version:
97 lines (84 loc) 3.81 kB
'use strict'; var _utils = require('./utils'); // 创建项目 var axios = require('axios'); var path = require('path'); var inquirer = require('inquirer'); // 命令行选择模版 var downloadGitRepo = require('download-git-repo'); // 下载仓库使用的包,非promise var _require = require('util'), promisify = _require.promisify; var promiseDownloadGitRepo = promisify(downloadGitRepo); // 包装promise var ncp = require('ncp'); // 用于拷贝下载好的模版,非promise var promiseNcp = promisify(ncp); var fs = require('fs'); // 文件操作 var exist = promisify(fs.stat); // 判断是否已存在文件 var _require2 = require('shelljs'), exec = _require2.exec; var chalk = require('chalk'); // 美化输出 var _require3 = require('./constants'), temporaryDownloadDirectory = _require3.temporaryDownloadDirectory, userInquirer = _require3.userInquirer; // 获取临时下载目录 // 下载模版 var downloadTemplate = async function downloadTemplate(repo, tag) { var api = 'OnionMister/' + repo; if (tag) { api += '#' + tag; } var dest = temporaryDownloadDirectory + '/' + repo; await promiseDownloadGitRepo(api, dest); return dest; }; module.exports = async function (projectName) { var projectExist = await exist(projectName).catch(function (err) { // 处理除文件已存在之外的其他错误 if (err.code !== 'ENOENT') { console.log(chalk.redBright.bold(err)); } }); // 文件已存在 if (projectExist) { console.log(chalk.redBright.bold('The file has exited!')); return; } try { // 选择要下载的模版 var _ref = await inquirer.prompt(userInquirer), template = _ref.template, description = _ref.description, author = _ref.author, packageType = _ref.packageType; var temporaryDir = await (0, _utils.waitFunLoading)(downloadTemplate, 'download Template...')('yst-react-cli-template'); var packageFile = temporaryDir + '/' + template + '/package.json'; // 找到模版下的package.json,跟用用户选择进行内容更新 if (await exist(packageFile)) { var data = fs.readFileSync(packageFile).toString(); var json = JSON.parse(data); json.name = projectName; json.description = description; json.author = author; fs.writeFileSync(packageFile, JSON.stringify(json, null, '\t'), 'utf-8'); } await promiseNcp(temporaryDir + '/' + template, path.resolve(projectName)); console.log(chalk.green('\nTemplate obtained successfully!\n')); await exec('cd ' + path.resolve(projectName) + ' && git init && git config --global core.autocrlf input && git add . && git commit -m "Initialize project using yst-react-cli"'); console.log(chalk.green('\nCreated git commit.\n')); console.log(chalk.blueBright('\nstart install dependencies...\n')); if (process.platform === 'darwin') { exec('rm -rf ' + temporaryDownloadDirectory); } else { exec('rmdir /S /Q ' + temporaryDownloadDirectory); } (0, _utils.installDep)({ dir: path.resolve(projectName), packageType: packageType }).then(function () { console.log(chalk.green('\nSuccess! Created ' + projectName + ' at ' + path.resolve(projectName) + '\n')); console.log('\nWe suggest that you begin by typing:\n'); console.log(chalk.cyan(' cd'), projectName); console.log(' ' + chalk.cyan(packageType + ' start')); console.log('\nHappy hacking!'); }); } catch (err) { console.log(chalk.redBright.bold(err)); } };