UNPKG

@adtkcn/hb-cli

Version:

用于uniapp的打包工具,可切换环境变量、可多配置,切换证书,更改版本,wifi调试

168 lines (143 loc) 5.34 kB
const path = require("path"); const server = require("../server/index.js"); const gen = require("../utils/gen.js"); const file = require("../utils/file.js"); const config = require("../config/config.js"); const utils = require("../utils/utils.js"); const ad = require("../utils/ad.js"); const dayjs = require("dayjs"); /** * @typedef {import('../index')} AppConfig */ /** * * @param {AppConfig} hb_cli * @param {object} answers * @param {'打包'| '改版本号'| 'Wifi调试'} answers.function * @param {"android"| "ios"| "android,ios"| "appResource"| "wgt"} answers.platform * @param {boolean} answers.iscustom false:正式版、true:自定义基座 * @param {boolean} answers.changeVersion 改版本号 * @param {'openWifiDebugAndConnect'|'connectToPhone'} answers.wifi 安卓Wifi调试[] * @param {string} answers.selectPhoneIP 选择的手机IP * @param {string} answers.inputPhoneIP 输入的手机IP * * @param {object} NewManifestConfig 新的manifest.json配置项 * @param {string} NewManifestConfig.versionName 版本号 * @param {number} NewManifestConfig.versionCode 版本号 * @param {string} NewManifestConfig.name 应用名称 * @param {object} packConfig 打包配置项 * @param {string} newVersion 新的版本号 * @param {string[]} AndroidIpList 安卓设备ip列表 */ async function handle( hb_cli, answers, NewManifestConfig, packConfig, newVersion, AndroidIpList ) { let appConfig = hb_cli.appConfig?.create?.(); // 创建环境变量文件 if (appConfig) { let filePath = config.genEnvConfigFile; if (hb_cli?.appConfig?.output) { filePath = path.join(config.workDir, hb_cli?.appConfig?.output); } await gen.generateCode(filePath, appConfig); } if (answers.changeVersion == true) { NewManifestConfig.versionName = newVersion; NewManifestConfig.versionCode = Number(NewManifestConfig.versionCode) + 1; } // console.log("NewManifestConfig", answers.changeVersion, newVersion); await utils.WriteConfig(config.manifestFileName, NewManifestConfig); var ip = ""; if (answers.inputPhoneIP) { ip = answers.inputPhoneIP; } else if (answers.selectPhoneIP && answers.selectPhoneIP != "自定义IP") { ip = answers.selectPhoneIP; } if (ip && !AndroidIpList.includes(ip)) { console.log("缓存IP:", config.IpFile); await utils.WriteConfig(config.IpFile, [...AndroidIpList, ip]); } if (answers.wifi == "openWifiDebugAndConnect") { let wifiStatus = await utils.OpenWifiDebug(); if (wifiStatus == 0) { await utils.ConnectPhoneWithWifi(ip); } } if (answers.wifi == "connectToPhone") { await utils.ConnectPhoneWithWifi(ip); } if (answers.function == "打包") { var OpenHBuilderCode = await utils.OpenHBuilder(); if (OpenHBuilderCode !== 0) { return "打开HBuilder编辑器失败"; } // 是否打包 let apps = []; let apkPath = ""; let hooks = []; // appFileUrl是本地文件路径时,是安卓,https开头是ios在线地址 if (["android", "ios", "android,ios"].includes(answers.platform)) { let hbuilderconfig = utils.MergeHBuilderConfig(packConfig, { iscustom: answers.iscustom, platform: answers.platform, }); await utils.WriteConfig(config.ConfigFileTemp, hbuilderconfig); apps = await utils.buildApp(answers.iscustom); apps.map(async (appUrl) => { let platform = ""; if (appUrl && appUrl.indexOf("https") == 0) { platform = "ios"; appUrl = await file.downloadFile( appUrl, config.workDir + "/unpackage/release/ipa", NewManifestConfig.name + "_" + dayjs().format("YYYYMMDDHHmm") + ".ipa" ); } else if (appUrl) { platform = "android"; apkPath = appUrl; } console.log("本地文件:", appUrl); utils.openDirectory(path.resolve(appUrl)); if (hb_cli?.onPackEnd) { hooks.push(hb_cli.onPackEnd(appUrl, platform)); } }); } else if (answers.platform == "wgt") { apps = await utils.buildWgtCli(packConfig); for (let i = 0; i < apps.length; i++) { console.log("本地文件:", path.resolve(apps[i])); utils.openDirectory(path.resolve(apps[i])); if (hb_cli?.onPackEnd) { hooks.push(hb_cli.onPackEnd(path.resolve(apps[i]), "wgt")); } } } else if (answers.platform == "appResource") { apps = await utils.buildAppResourceCli(packConfig); for (let i = 0; i < apps.length; i++) { console.log("本地目录:", path.resolve(apps[i])); // await utils.sleep(2000); utils.openDirectory(path.resolve(apps[i])); if (hb_cli?.onPackEnd) { hooks.push(hb_cli.onPackEnd(path.resolve(apps[i]), "appResource")); } } } if (hooks.length) { await Promise.allSettled(hooks); } if (apkPath && answers.iscustom === false) { //正式版并且是安卓才启动文件服务 server.init(apkPath); } } ad.printAd(); } module.exports = { handle };