UNPKG

@yeepay/yeepay-cli

Version:

易宝前端脚手架

93 lines (89 loc) 3.72 kB
#!/usr/bin/env node import { Command } from 'commander'; const program = new Command('yeepay-cli'); import semver from "semver" import Utils from '../lib/utils/utils.js'; const utils = new Utils() import Log from './utils/log.js' import fs from 'fs/promises'; import chalk from 'chalk' import View from './view.js' import OperateGit from './utils/operateGit.js' import path from 'path'; import UpdateCli from './utils/updateCli.js'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const config = JSON.parse(await fs.readFile(path.resolve(__dirname, '../package.json'), 'utf-8')); const enginesNode = config.engines.node const version = config.version export default class YeepayInit { constructor() { this.nodeVersionCheck(enginesNode, 'yeepay-cli') program.addHelpText('before', chalk.yellow('\n直接输入 yeepay-cli 可进入可视化模板配置\n')); program .version(version, '-v, --version', '输出版本号') .action(async (unuse, options) => { Log.green("欢迎使用yeepay-cli") Log.enter() const view = new View() const answers = await view.askQuestion() const operateGit = new OperateGit({ options, typeList: answers }) await operateGit.mapTypeList() }) // default值只在主命令中有效,create是子命令直接写default无效 program .command('create [projectName]') .usage("<projectName> [options] [galaxTtype]") .description(chalk.green('projectName项目名称仅支持小写字母、数字和连字符,且不能以连字符、数字开头,连字符结尾。')) .option('-W, --web', chalk.green('行业线vue3模板')) .option('-D, --dashbord', chalk.green('运营后台模板')) .option('-G, --galaxy <galaxTtype>', chalk.green('商户后台galaxy内部模板,') + chalk.yellow('参数二选一: vue2,vue3')) .option('-H, --h5', chalk.green('h5模板')) .option('-U, --uniapp', chalk.green('uniapp模板,vue3+uview')) .action(async (projectName, type, options) => { projectName = projectName.trim(); // 去除前后空格 if (!projectName) { Log.red('项目名称不能为空,请使用 yeepay-cli create -h 查看使用帮助') process.exit(1) } if (!utils.checkProjectName(projectName)) { Log.red('项目名称格式错误,请使用 yeepay-cli create -h 查看使用帮助') process.exit(1) } if (utils.checkFolderExists(projectName)) { Log.red(projectName + ' 该文件夹已存在,请重新输入项目名称') process.exit(1) } const typeList = [{ projectName }, { projectType: Object.keys(type)[0] }] if (type.galaxy) { typeList.push({ galaxyType: type.galaxy }) } const operateGit = new OperateGit({ options, typeList }) await operateGit.mapTypeList() }) program .command('update') .description(chalk.green("模板升级")) .action(async () => { const online = await utils.checkNetworkConnection() if (!online) { Log.red('您的网络连接出现异常,请确认后重新拉取项目~'); process.exit(1); } const updateCli = new UpdateCli() updateCli.checkVersion(version) }) program.parse(process.argv) } nodeVersionCheck(wanted, id) { if (!semver.satisfies(process.version, wanted)) { Log.enter() Log.red( `您当前正在使用的 Node 版本是: ${process.version }, 但 ${id} 要求最低版本是: ${enginesNode}` ); process.exit(1); } } }