@yeepay/yeepay-cli
Version:
易宝前端脚手架
93 lines (89 loc) • 3.72 kB
JavaScript
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);
}
}
}