@vivo-minigame/cli
Version:
Command line interface for rapid Vivo minigame development
16 lines • 4.6 kB
JavaScript
;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){}