const { spawn } = require("child_process"); const readline = require("readline"); class DevelopClientScript { constructor() { if (DevelopClientScript.instance) { return DevelopClientScript.instance; } DevelopClientScript.instance = this; } promptUser(question) { return new Promise((resolve) => { const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.question(question, (res) => { resolve(res); rl.close(); }); }); } async runClient() { console.error("请选择你需要运行的客户端(回复数字后回车)"); console.error("0.取消"); console.error("1.微信小程序"); console.error("2.公众号或者H5"); const runClientRes = await this.promptUser("请输入运行的客户端:"); switch (runClientRes) { case "0": break; case "1": await this.runNpmScript("dev:mp-weixin"); break; case "2": await this.runNpmScript("dev:h5"); break; default: await this.runClient(); break; } } runNpmScript(scriptName) { return new Promise((resolve, reject) => { const isWindows = process.platform === "win32"; const command = isWindows ? "cmd.exe" : "npm"; const args = isWindows ? ["/c", "npm", "run", scriptName] : ["run", scriptName]; const runProcess = spawn(command, args); runProcess.stdout.on("data", (data) => { console.log(data.toString()); }); runProcess.stderr.on("data", (data) => { console.error(data.toString()); }); runProcess.on("close", (code) => { if (code !== 0) { reject(new Error(`运行错误,请查看以下报错信息寻找解决方法: ${error.message}`)); } else { resolve(); } }); }); } async run(targetVersion) { const currentVersion = process.versions.node; if (currentVersion < targetVersion) { throw new Error(`你的当前node版本为(${currentVersion}),需要安装目标版本为 ${targetVersion} 以上!!`); } await this.runClient(); } static getInstance() { if (!DevelopClientScript.instance) { DevelopClientScript.instance = new DevelopClientScript(); } return DevelopClientScript.instance; } } (async () => { const develop = DevelopClientScript.getInstance(); try { await develop.run("16.16.0"); } catch (error) { console.error(error.message); } })();