in src/utils/nodeVersionHelper.ts [54:122]
public static nvmSupport(config: ICordovaAttachRequestArgs | ICordovaLaunchRequestArgs): void {
let bin: string | undefined = undefined;
let versionManagerName: string | undefined = undefined;
// first try the Node Version Switcher 'nvs'
let nvsHome = process.env["NVS_HOME"];
if (!nvsHome) {
// NVS_HOME is not always set. Probe for 'nvs' directory instead
const nvsDir = process.platform === "win32" ? path.join(process.env["LOCALAPPDATA"] || "", "nvs") : path.join(process.env["HOME"] || "", ".nvs");
if (fs.existsSync(nvsDir)) {
nvsHome = nvsDir;
}
}
const { nvsFormat, remoteName, semanticVersion, arch } = NodeVersionHelper.parseVersionString(config.runtimeVersion);
if (nvsFormat || nvsHome) {
if (nvsHome) {
bin = path.join(nvsHome, remoteName, semanticVersion, arch);
if (process.platform !== "win32") {
bin = path.join(bin, "bin");
}
versionManagerName = "nvs";
} else {
throw new Error(localize("nvsHomeNotFoundMessage", "Attribute 'runtimeVersion' requires Node.js version manager 'nvs'."));
}
}
if (!bin) {
// now try the Node Version Manager "nvm"
if (process.platform === "win32") {
const nvmHome = process.env["NVM_HOME"];
if (!nvmHome) {
throw new Error(localize("nvmWindowsNotFoundMessage", "Attribute 'runtimeVersion' requires Node.js version manager 'nvm-windows' or 'nvs'."));
}
bin = path.join(nvmHome, `v${config.runtimeVersion}`);
versionManagerName = "nvm-windows";
} else { // macOS and linux
let nvmHome = process.env["NVM_DIR"];
if (!nvmHome) {
// if NVM_DIR is not set. Probe for '.nvm' directory instead
const nvmDir = path.join(process.env["HOME"] || "", ".nvm");
if (fs.existsSync(nvmDir)) {
nvmHome = nvmDir;
}
}
if (!nvmHome) {
throw new Error(localize("nvmHomeNotFoundMessage", "Attribute 'runtimeVersion' requires Node.js version manager 'nvm' or 'nvs'."));
}
bin = path.join(nvmHome, "versions", "node", `v${config.runtimeVersion}`, "bin");
versionManagerName = "nvm";
}
}
if (fs.existsSync(bin)) {
if (!config.env) {
config.env = {};
}
if (process.platform === "win32") {
process.env["Path"] = `${bin};${process.env["Path"]}`;
} else {
process.env["PATH"] = `${bin}:${process.env["PATH"]}`;
}
} else {
throw new Error(localize("runtimeVersionNotFoundMessage", "Node.js version '{0}' not installed for '{1}'.", config.runtimeVersion, versionManagerName));
}
}