UNPKG

itoolbox-cli

Version:

iToolBox CLI 工具,用于创建扩展,打包扩展.

110 lines (99 loc) 4.29 kB
const path = require('path'); // fs 扩展库 const fs = require('fs-extra'); // 命令行库 const shell = require('shelljs'); // 交互式命令界面 const inquirer = require('inquirer'); // 命令行loading工具 const ora = require('ora'); // git库下载工具 const download = require('download-git-repo'); // node 原生文件操作方法 const exists = require('fs').existsSync; const terminalLink = require('terminal-link'); const logger = require('./logger'); const { findNpm, getLocalTip } = require('../common/utils'); const cwd = process.cwd(); const ENMU = require('../constants/emnu'); const { REPO_ORIGIN } = require('../constants/base'); const { NEW_QUESTION } = require('../constants/question'); const TIP_INFO = getLocalTip().new; module.exports = function (args) { logger.infoTip(TIP_INFO.info); const autoInstall = !(args[3] === '--no-auto-install'); inquirer.prompt(NEW_QUESTION).then(function (answers) { // 接收输入的项目名称 const projectName = `${answers.name}`; // 重新定义项目的地址 const targetPath = path.join(cwd, `${answers.path}` || './'); // 检测路径是否存在 if (exists(path.join(targetPath, projectName))) { // 存在,直接输入错误信息,并返回 logger.errorTip(TIP_INFO.createFolderFail[0], TIP_INFO.createFolderFail[1]); return; } // 定义加载中的提示信息 const spinner = ora(TIP_INFO.downloadTip); // 开始执行loading spinner.start(); const { branch, homepage, desc, name, short } = ENMU[answers.template]; // 下载项目 download(`${REPO_ORIGIN}${branch}`, path.join(targetPath, projectName), { clone: false }, function (err) { // 关闭loading spinner.stop(); if (err) { // 出现错误 logger.errorTip(TIP_INFO.downloadFail); } else { // 下载成功 logger.successTip(TIP_INFO.downloadSuccess); // 修改package内容为当前项目设置内容 changePkgValue(path.join(targetPath, projectName), answers, function() {}); // 不自动安装依赖,直接返回 if (!autoInstall) { return; } const npm = findNpm(); logger.info('获取到本地的模块管理工具', npm); // 定义自动安装依赖时的提示信息 const spinnerInstall = ora(TIP_INFO.autoInstallTip); spinnerInstall.start(); // 通过 shell 进入项目目录进行安装依赖 npm && shell.exec(`cd ${path.join(targetPath, projectName)} && ${npm} install`, function () { spinnerInstall.stop(); logger.info(TIP_INFO.autoInstallSuccess); logger.info(`${TIP_INFO.linkTip[0]} ${terminalLink(`https://github.com/${REPO_ORIGIN}${branch}`, `https://github.com/${REPO_ORIGIN}${branch}`)} ${TIP_INFO.linkTip[1]}`); homepage && logger.info(`${TIP_INFO.homepageTip[0]} ${terminalLink(homepage, homepage)} ${TIP_INFO.homepageTip[1]}`); logger.successTip(TIP_INFO.success); }); } }) }); }; function changePkgValue (filePath, answers, callback) { fs.readFile(`${filePath}/package.json`, 'utf8', function (err, data) { const val = JSON.parse(data); val.name = answers.name; val.description = answers.desc; val.author = answers.author; val.license = answers.license || 'MIT'; val.homepage = answers.gitsrc || ''; val.extInfo = { description: answers.desc || '', name: answers.name, version: '1.0.0', author: answers.author, rarName: answers.rarName, index: 'index.html', logo: "./src/assets/logo.png", width: 700, height: 700 }; fs.writeFile(`${filePath}/package.json`, JSON.stringify(val, null, '\t'), 'utf8', function (err) { callback && callback(); }); }); };