in src/utils/cordovaCommandHelper.ts [26:99]
public static executeCordovaCommand(projectRoot: string, command: string, useIonic: boolean = false): Promise<void> {
let telemetryEventName: string = CordovaCommandHelper.CORDOVA_TELEMETRY_EVENT_NAME;
let cliCommandName: string = CordovaCommandHelper.CORDOVA_CMD_NAME;
let cliDisplayName: string = CordovaCommandHelper.CORDOVA_DISPLAY_NAME;
if (useIonic) {
telemetryEventName = CordovaCommandHelper.IONIC_TELEMETRY_EVENT_NAME;
cliCommandName = CordovaCommandHelper.IONIC_CMD_NAME;
cliDisplayName = CordovaCommandHelper.IONIC_DISPLAY_NAME;
}
return CordovaCommandHelper.selectPlatform(projectRoot, command, useIonic)
.then((platform) => {
TelemetryHelper.generate(telemetryEventName, (generator) => {
generator.add("command", command, false);
let logger = OutputChannelLogger.getMainChannel();
let commandToExecute;
if (useIonic && ["run", "prepare"].indexOf(command) > -1) {
commandToExecute = `${cliCommandName} cordova ${command}`;
} else {
commandToExecute = `${cliCommandName} ${command}`;
}
if (platform) {
commandToExecute += ` ${platform}`;
// Workaround for dealing with new build system in XCode 10
// https://github.com/apache/cordova-ios/issues/407
if (platform === "ios") {
commandToExecute += " --buildFlag='-UseModernBuildSystem=0'";
}
}
const runArgs = CordovaCommandHelper.getRunArguments(projectRoot);
if (runArgs.length) {
commandToExecute += ` ${runArgs.join(" ")}`;
}
logger.log(localize("Executing", "########### EXECUTING: {0} ###########", commandToExecute));
const env = CordovaProjectHelper.getEnvArgument({
env: CordovaCommandHelper.getEnvArgs(projectRoot),
envFile: CordovaCommandHelper.getEnvFile(projectRoot),
});
const execution = new Promise((resolve, reject) => {
const process = child_process.exec(commandToExecute, { cwd: projectRoot, env });
process.on("error", (err: any) => {
// ENOENT error will be thrown if no Cordova.cmd or ionic.cmd is found
if (err.code === "ENOENT") {
window.showErrorMessage(localize("PackageNotFoundPleaseInstall", "{0} not found, please run \"npm install –g {1}\" to install {2} globally", cliDisplayName, cliDisplayName.toLowerCase(), cliDisplayName));
}
reject(err);
});
process.stderr.on("data", (data: any) => {
logger.append(data);
});
process.stdout.on("data", (data: any) => {
logger.append(data);
});
process.stdout.on("close", () => {
logger.log(localize("FinishedExecuting", "########### FINISHED EXECUTING: {0} ###########", commandToExecute));
resolve({});
});
});
return TelemetryHelper.determineProjectTypes(projectRoot)
.then((projectType) => generator.add("projectType", TelemetryHelper.prepareProjectTypesTelemetry(projectType), false))
.then(() => execution);
});
});
}