UNPKG

@vivo-minigame/cli

Version:

Command line interface for rapid Vivo minigame development

16 lines 4.6 kB
#!/usr/bin/env node "use strict";var _interopRequireDefault=require("@babel/runtime-corejs2/helpers/interopRequireDefault"),_commander=_interopRequireDefault(require("commander")),_didyoumean=_interopRequireDefault(require("didyoumean")),_cliSharedUtils=require("@vivo-minigame/cli-shared-utils"),_checkVersion=require("./lib/util/checkVersion"),_enhanceErrorMessages=_interopRequireDefault(require("./lib/util/enhanceErrorMessages")),_create=_interopRequireDefault(require("./lib/create")),_upgrade=_interopRequireDefault(require("./lib/upgrade")),_Service=_interopRequireDefault(require("./Service"));_didyoumean.default.threshold=.6;const pkg=require("../package.json");function suggestCommands(cmd){const availableCommands=_commander.default.commands.map(cmd=>cmd._name),suggestion=(0,_didyoumean.default)(cmd,availableCommands);suggestion&&(0,_cliSharedUtils.log)(` `+_cliSharedUtils.chalk.red(`Did you mean ${_cliSharedUtils.chalk.yellow(suggestion)}?`))}// 检查node版本 (0,_checkVersion.checkNodeVersion)(_cliSharedUtils.requiredVersion,pkg.name),_cliSharedUtils.semver.satisfies(process.version,_cliSharedUtils.requiredVersion)||((0,_cliSharedUtils.error)(`You are using Node ${process.version}, but mg-service `+`requires Node ${_cliSharedUtils.requiredVersion}.\nPlease upgrade your Node version.`),process.exit(1));// PATH_PROJECT为当前服务执行的目录,调试时会被注入,非调试模式,取process.cwd() const service=new _Service.default(_cliSharedUtils.projectPath),args=(0,_cliSharedUtils.minimist)(process.argv.slice(2),{boolean:["isStreamPack"],string:["buildType"],default:{isStreamPack:!0}}),cleanedArgs={};// 解析参数 // 取出命令 for(const key in args){const cleanedKey=key.replace(/--/g,"");// 使用正则表达式替换 -- 为空字符串 cleanedArgs[cleanedKey]=args[key]}const cmd=cleanedArgs._[0];async function main(){// 检查Cli版本 // output help information on unknown commands // add some useful info on help // enhance common error messages (0,_checkVersion.checkCliVersion)(pkg),_commander.default.version(pkg.version,"-v, --version").usage("<command> [options]"),_commander.default.command("init <app-name>").description("init a new project").option("-t, --template <template>","Choose a template for this project","default").option("-c, --cwd <dir>","input the target dir for initing").option("-f, --force","force overwrite the minigame project if existed").action((name,cmd)=>{const options=cleanArgs(cmd);(0,_create.default)(name,options)}),_commander.default.command("upgrade").description("upgrade the current project for new features, such as loadsubpackage").action(()=>{(0,_upgrade.default)()}),_commander.default.arguments("<command>").action(cmd=>{"server"===cmd||"build"===cmd||"release"===cmd||"watch"===cmd||"transfer"===cmd||(_commander.default.outputHelp(),(0,_cliSharedUtils.log)(` `+_cliSharedUtils.chalk.red(`Unknown command ${_cliSharedUtils.chalk.yellow(cmd)}.`)),(0,_cliSharedUtils.log)(),suggestCommands(cmd))}),_commander.default.on("--help",()=>{(0,_cliSharedUtils.log)(),(0,_cliSharedUtils.log)(` Run ${_cliSharedUtils.chalk.cyan(`mg <command> --help`)} for detailed usage of given command.`),(0,_cliSharedUtils.log)()}),_commander.default.commands.forEach(c=>c.on("--help",()=>(0,_cliSharedUtils.log)())),(0,_enhanceErrorMessages.default)("missingArgument",argName=>`Missing required argument ${_cliSharedUtils.chalk.yellow(`<${argName}>`)}.`),(0,_enhanceErrorMessages.default)("unknownOption",optionName=>`Unknown option ${_cliSharedUtils.chalk.yellow(optionName)}.`),(0,_enhanceErrorMessages.default)("optionMissingArgument",(option,flag)=>`Missing required argument for option ${_cliSharedUtils.chalk.yellow(option.flags)}`+(flag?`, got ${_cliSharedUtils.chalk.yellow(flag)}`:``)),_commander.default.parse(process.argv),process.argv.slice(2).length||_commander.default.outputHelp()}function camelize(str){return str.replace(/-(\w)/g,(_,c)=>c?c.toUpperCase():"")}// commander passes the Command object itself as options, // extract only actual options into a fresh object. function cleanArgs(cmd){const args={};return cmd.options.forEach(o=>{const key=camelize(o.long.replace(/^--/,""));// if an option is not present and Command has a method with the same name // it should not be copied "function"!=typeof cmd[key]&&"undefined"!=typeof cmd[key]&&(args[key]=cmd[key])}),args}// 开始服务 try{"server"===cmd||"build"===cmd||"release"===cmd||"watch"===cmd||"transfer"===cmd?(_commander.default.version(pkg.version,"-v, --version").parse(process.argv),service.run(cmd,cleanedArgs)):main()}catch(err){}