UNPKG

unity-find-fault

Version:

A tool to find fault in unity project.

89 lines 3.45 kB
import os from 'os'; import { spawn } from "child_process"; export class Cmd { _output = ''; runNodeModule(moduleName, params, options) { if (os.type() == 'Windows_NT' && !moduleName.match(/\.cmd$/)) { moduleName += '.cmd'; } return this.run(moduleName, params, options); } run(command, params, options) { this._output = ''; // options = Object.assign(options || {}, { cwd: this.cfg.cwd }); return new Promise((resolve, reject) => { if (!options?.silent) console.log(`run command: ${command}, params:`, params, options); if (!options) { options = {}; } if (!params) params = []; options.stdio = 'pipe'; let proc = spawn(command, params, options); let lastData = undefined; proc.stdout.on('data', (data) => { let dataStr = String(data); if (options?.outputFormatter) dataStr = options.outputFormatter(dataStr); if (dataStr) { if (dataStr !== lastData) { if (options?.logPrefix) { dataStr = options.logPrefix + dataStr; } this._output += dataStr; if (!options?.silent) process.stdout.write(dataStr); lastData = dataStr; } } }); proc.stderr.on('data', (data) => { // 不一定代表进程exitcode != 0,可能只是进程调用了console.error let dataStr = String(data); if (options?.outputFormatter) dataStr = options.outputFormatter(dataStr); if (dataStr) { if (dataStr !== lastData) { if (options?.logPrefix) { dataStr = options.logPrefix + dataStr; } this._output += dataStr; if (!options?.silent) process.stderr.write(dataStr); lastData = dataStr; } } }); // 进程错误 proc.on('error', (error) => { if (!options?.silent) console.error(error); reject({ code: 1, error }); }); // 进程关闭 proc.on('close', (code) => { if (!options?.silent) console.log(`process closed with exit code ${code}: ${command} ${params?.join(' ')}`); if (code == 0) { resolve(0); } else { let errMsg = `process closed with exit code ${code}: ${command} ${params?.join(' ')}`; if (options?.logPrefix) { errMsg = options.logPrefix + errMsg; } reject({ code, error: new Error(errMsg) }); } }); proc.on('exit', (code, signal) => { if (!options?.silent) console.log(`process exits`); }); }); } get output() { return this._output; } } //# sourceMappingURL=Cmd.js.map