97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
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);
|
|
}
|
|
})();
|