@oppo-minigame/cli
Version:
Command line interface for rapid OPPO minigame development
2 lines • 9.74 kB
JavaScript
const pkg=require("../../package.json"),updateNotifier=require("update-notifier").default,notifier=updateNotifier({pkg:pkg,updateCheckInterval:0,shouldNotifyInNpmScript:!0});notifier.notify({isGlobal:!0});const commander=require("commander"),chalk=require("chalk"),path=require("path"),fs=require("fs-extra"),{MANIFEST_FILE_NAME:MANIFEST_FILE_NAME,SIGN_DIR_NAME:SIGN_DIR_NAME,SIGN_RELEASE_DIR:SIGN_RELEASE_DIR,CERTIFICATE_FILE_NAME:CERTIFICATE_FILE_NAME,PRIVATE_FILE_NAME:PRIVATE_FILE_NAME}=require("../config/config"),version=pkg.version;function handleAutoEnv(e,o){if(!e.autoEnv)return o;const n=e.pub_dir||process.cwd(),t=path.join(n,SIGN_DIR_NAME,SIGN_RELEASE_DIR);return fs.existsSync(path.join(t,CERTIFICATE_FILE_NAME))&&fs.existsSync(path.join(t,PRIVATE_FILE_NAME))?SIGN_RELEASE_DIR:"development"}function platformPack(e,o,n,t){const i="release"!==(o=handleAutoEnv(e,o)),r=e.pub_dir||process.cwd(),a=path.join(r,MANIFEST_FILE_NAME);fs.existsSync(a)&&fs.readJsonSync(a).isWXTransfer?t(i):n(i)}commander.version(version).usage("<command> [options]"),commander.__proto__.publishDirectoryOption=function(){return this.option("-d, --pub_dir [pubDir]","指定发布目录,默认为当前目录")},commander.__proto__.qrcodeOption=function(){return this.option("-q, --qrcode","生成二维码,可通过调试器右上角扫码下载 rpk 自动安装")},commander.__proto__.workerOption=function(){return this.option("--worker <workerPath>","worker 根目录绝对路径")},commander.__proto__.autoEnvironmentOption=function(){return this.option("--auto-env","自动检测环境,有 release 证书则优先打 release 包,否则 debug")},commander.__proto__.autoInstallOption=function(){return this.option("--auto-install","打完包是否自动安装")},String.prototype.replaceBackslash=function(){return this.replace(/\\/g,"/")},commander.command("cocos [env]").publishDirectoryOption().option("--small-pack","是否小包模式").qrcodeOption().workerOption().description("build cocos project to quickgame").action((e,o)=>{const n=require("../commands/cocos_v2");process.env.NODE_ENV="release"!=e?"development":"production",n(o.pub_dir,"release"!=e,o.smallPack,o.qrcode,o.worker)}),commander.command("cocoscreator [env]").option("--small-pack","是否小包模式").qrcodeOption().workerOption().description("build cocos project to quickgame").action((e,o)=>{const n=require("../commands/cocoscreator");process.env.NODE_ENV="release"!=e?"development":"production",n("release"!=e,o.smallPack,o.qrcode,o.worker)}),commander.command("wasm [env]").publishDirectoryOption().qrcodeOption().option("-m, --mode [mode]","生成 wasm 文件的模式 debug|optimize,默认为 debug,即调试模式").workerOption().description("pack a project to rpk and trasform ts to wasm").action((e,o)=>{const n=require("../commands/wasm"),t=require("shelljs");process.env.NODE_ENV="release"!=e?"development":"production";const i=process.cwd();function r(e,o){return path.join(i,e,o).split(path.sep).join("/")}n(o.pub_dir,"release"!=e,o.qrcode,o.mode,o.worker),t.cd(__dirname),"optimize"==o.mode?(t.echo(`npx asc ${r("assembly","index.ts")} -b ${r("assembly/build","optimize.wasm")} --optimize`),t.exec(`npx asc ${r("assembly","index.ts")} -b ${r("assembly/build","optimize.wasm")} --optimize`)):(t.echo(`npx asc ${r("assembly","index.ts")} -b ${r("assembly/build","debug.wasm")} -t ${r("assembly/build","debug.wat")} --sourceMap ${r("assembly/build","debug.wasm.map")} --debug`),t.exec(`npx asc ${r("assembly","index.ts")} -b ${r("assembly/build","debug.wasm")} -t ${r("assembly/build","debug.wat")} --sourceMap ${r("assembly/build","debug.wasm.map")} --debug`)),t.cd(i)}),commander.command("laya [env]").publishDirectoryOption().qrcodeOption().workerOption().description("build laya project to quickgame").action((e,o)=>{const n=require("../commands/laya");process.env.NODE_ENV="release"!=e?"development":"production",n(o.pub_dir,"release"!=e,o.qrcode,o.worker)}),commander.command("egret [env]").publishDirectoryOption().qrcodeOption().workerOption().description("build egret project to quickgame").action((e,o)=>{const n=require("../commands/egret");process.env.NODE_ENV="release"!=e?"development":"production",n(o.pub_dir,"release"!=e,o.qrcode,o.worker)}),commander.command("unity [env]").publishDirectoryOption().qrcodeOption().autoInstallOption().option("-i, --icon <icon>","指定应用图标的路径;若此处缺省,则配置默认图标").option("-a, --addressable <remoteURL>","与 --remoteStreamingAssets 相同,兼容旧命名","").option("--remoteStreamingAssets <remoteURL>","将 StreamingAssets 中的资源放置到服务器,不再把此目录中的资源进行打包,需要自行将资源上传至填写的地址,例如 http://localhost:8080/StreamingAssets","").option("-u, --unityVer <unityVersion>","指定unity当前的版本,若不指定则为默认值","2019.4.35f1").option("-p, --packageName <packageName>","指定游戏包名,若不指定则为默认值 com.unity.test","com.unity.test").option("-g, --gameName <gameName>","指定游戏名称,默认为unityTest","unityTest").option("-n, --versionName <versionName>","指定版本名称;若此处缺省,则默认为1.0.0","1.0.0").option("-c, --versionCode <versionCode>","指定版本号;若此处缺省,则默认为1","1").option("-m, --minPlatformVersion <minPlatformVersion>","指定最小平台版本号;若此处缺省,则默认为1103","1103").option("-o, --orientation <orientation>","指定屏幕方向;若此处缺省,则默认为portrait","portrait").option("-s, --signPrivate <signPrivate>","指定正式签名文件的private文件;若此处缺省,则默认为空","").option("-e, --signCertificate <signCertificate>","指定正式签名文件的certificate文件;若此处缺省,则默认为空","").option("--disableBundleCache","是否禁用bundle缓存,默认启用缓存").option("--gameCDNRoot <gameCDNRoot>","设置缓存路径CDN 例如 http://10.117.224.49:8080/StreamingAssets","").option("--bundlePathIdentifier <bundlePathIdentifier>","缓存路径标识,使用分号分隔,例如 StreamingAssets;bundles","").option("--excludeFileExtensions <excludeFileExtensions>","不缓存的文件类型,使用分号分隔,例如 .json;.hash","").option("--bundleHashLength <bundleHashLength>","bundle中hash占多少长度,默认32位",32).option("--defaultReleaseSize <defaultReleaseSize>","清理缓存时默认额外清理的大小,单位MB,默认30MB",30).option("--keepOldVersion","资源更新后是否保留旧版本资源,默认删除不保留").option("--excludeClearFiles <excludeClearFiles>","自动清理时忽略的文件,支持纯hash或名称,使用分号分隔,例如 8d265a9dfd6cb7669cdb8b726f0afb1e;asset1","").option("--enableCacheLog","是否将缓存信息输出到控制台,便于调试").option("--unityUseWebGL2","unity是否使用webgl2.0版本").description("build unity project to quickgame").action((e,o)=>{const n=require("../commands/unity_v2");process.env.NODE_ENV="release"!=e?"development":"production",o.addressable?o.streamingAssetsURL=o.addressable:o.remoteStreamingAssets&&(o.streamingAssetsURL=o.remoteStreamingAssets),n(o,"release"!=e)}),commander.command("subpack [env]").publishDirectoryOption().qrcodeOption().autoEnvironmentOption().autoInstallOption().workerOption().description("(已废弃,请使用 pack 命令)当前项目打为总包(整包+主包+分包) rpk").action((e,o)=>{console.warn("已废弃,请使用 pack 命令"),platformPack(o,e,e=>{require("../commands/normal")(o,e)},e=>{require("../weixin/commands/pack").start({...o,isDebugEnv:e,subpack:!0})})}),commander.command("pack [env]").publishDirectoryOption().qrcodeOption().autoEnvironmentOption().autoInstallOption().workerOption().description("自动打包当前项目").action((e,o)=>{const n="release"!==(e=handleAutoEnv(o,e)),t=o.pub_dir||process.cwd(),i=fs.readJsonSync(path.join(t,MANIFEST_FILE_NAME)),r={...o,isDebugEnv:n};i.allianceVersion?require("../pack/alliance").start(r):i.isWXTransfer?require("../pack/wechat").start(r):require("../pack/oppo").start(r)}),commander.command("transfer").publishDirectoryOption().option("--config-only","是否只转化配置(适用于只修改了微信配置文件,重新应用配置后打包安装)").option("--adapter-only","是否只注入适配模块(适用于工具更新,游戏未更新,重新注入适配层后打包安装)").option("-y --yes","是否使用推荐选项直接转化,无需手动选择").option("--package <package>","包名").option("--projectName <projectName>","项目名称").option("--versionCode <versionCode>","版本号").option("--versionName <versionName>","版本名称").option("--minPlatformVersion <minPlatformVersion>","最小平台版本").option("--icon <icon>","图标路径").description("微信转 OPPO 小游戏").action(e=>{require("../weixin")(e)}),commander.command("debug").option("--log","查看小游戏运行时日志,比chrome控制台日志更全").description("调试相关的工具集合").action(e=>{if(!e.log)return;const{log:o}=require("../commands/debug");o()}),commander.command("regedit").description("注册快捷打包指令,方便通过右键菜单使用").action(()=>{require("../commands/regedit").register()}),commander.command("unregedit").description("注销快捷打包指令").action(()=>{require("../commands/regedit").unregister()}),commander.on("--help",()=>{console.log(),console.log(`Run ${chalk.cyan("quickgame <command> --help")} for detailed usage of given command.`),console.log()}),require("fs-extra"),setTimeout(()=>{commander.parse(process.argv),process.argv.slice(2).length||commander.outputHelp()},0);