You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.0 KiB
106 lines
3.0 KiB
7 months ago
|
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)
|
||
|
}
|
||
|
})()
|