gchcg-cli-dev
Version:
gchcg cli dev
1 lines • 2.98 kB
JavaScript
;module.exports=core;const path=require("path"),semver=require("semver"),colors=require("colors/safe"),userHome=require("user-home"),pathExists=require("path-exists").sync,commander=require("commander"),log=require("./log"),exec=require("./exec"),constant=require("./const"),pkg=require("../package.json"),program=new commander.Command;async function core(){try{await prepare(),registerCommand()}catch(e){log.error(e.message)}}function registerCommand(){program.name(Object.keys(pkg.bin)[0]).usage("<command> [options]").description("工厂化重构项目脚手架,支持项目初始化、发布、推送").version(pkg.version),program.command("init [projectName]").description("初始化项目,初次使用会检查更新token").option("-r, --refreshToken","强制更新远程仓库token").option("-f, --force","是否强制初始化项目").option("-s, --ssh","选择子模块模板时默认使用http方式初始化git,可选项:ssh").action(exec),program.command("publish").description("发布项目,会自动commit、push、使用--prod会发布到正式环境").option("-r, --refreshToken","强制更新远程仓库token").option("-p, --prod","是否为正式环境").option("-t, --type","commit类型、默认fix [feat,fix,docs,style,refactor,perf,test,build,ci,chore,revert]").action(exec),program.command("push").description("推送项目,publish的简版,会自动commit、push,支持-t、-m参数").option("-t, --type","commit类型、默认fix [feat,fix,docs,style,refactor,perf,test,build,ci,chore,revert]").option("-m, --message","commit提交信息").action(exec),program.on("command:*",(function(e){const o=program.commands.map((e=>e.name()));console.log(colors.red("未知的命令:"+e[0])),o.length>0&&console.log(colors.red("可用命令:"+o.join(",")))})),program.parse(process.argv),program.args&&program.args.length<1&&program.outputHelp()}async function prepare(){checkPkgVersion(),checkRoot(),checkUserHome(),checkEnv(),await checkGlobalUpdate()}async function checkGlobalUpdate(){const e=pkg.version,o=pkg.name,{getNpmSemverVersion:r}=require("./get-npm-info"),t=await r(e,o);t&&semver.gt(t,e)&&log.warn(colors.yellow(`请手动更新 ${o},当前版本:${e},最新版本:${t}\n 更新命令: npm install -g ${o}`))}function checkEnv(){const e=require("dotenv"),o=path.resolve(userHome,".env");pathExists(o)&&e.config({path:o}),createDefaultConfig()}function createDefaultConfig(){const e={home:userHome};process.env.CLI_HOME?e.cliHome=path.join(userHome,process.env.CLI_HOME):e.cliHome=path.join(userHome,constant.DEFAULT_CLI_HOME),process.env.CLI_HOME_PATH=e.cliHome}function checkUserHome(){if(!userHome||!pathExists(userHome))throw new Error(colors.red("当前登录用户主目录不存在!"))}function checkRoot(){require("root-check")()}function checkPkgVersion(){log.info("cli",pkg.version)}process.on("unhandledRejection",((e,o)=>{throw e})),process.on("uncaughtException",(e=>{process.exit(1)}));