Piszę kilka skryptów powłoki węzła do użycia podczas programowania na platformie. Mamy zarówno programistów Mac, jak i Windows. Czy istnieje zmienna, którą mogę sprawdzić w węźle, aby uruchomić plik .sh w jednej instancji, a .bat w innej?
Piszę kilka skryptów powłoki węzła do użycia podczas programowania na platformie. Mamy zarówno programistów Mac, jak i Windows. Czy istnieje zmienna, którą mogę sprawdzić w węźle, aby uruchomić plik .sh w jednej instancji, a .bat w innej?
Odpowiedzi:
Zmienna do użycia to process.platform
Na Macu zmienna zwraca darwin. W systemie Windows zwraca win32(nawet w wersji 64-bitowej).
aixdarwinfreebsdlinuxopenbsdsunoswin32Właśnie ustawiłem to na górze mojego jakeFile:
var isWin = process.platform === "win32";
'win32', nawet w 64-bitowych systemach operacyjnych. tj. process.platform === 'win32'jest wystarczający
process.platform === 'win32'wydaje się bardziej zwięzłe niż wyrażenie regularne i oczywiście szybsze. Wyrażenie regularne, które opublikował Mauvis, wydaje się być lepszą kontrolą jakości . Jeśli Node / Windows każdy zdecyduje się zwrócić win64, winARM itp., Lub cokolwiek innego, tona kodu zepsuje się przy porównywaniu ciągów. Szukamy tylko tego, czy jest to Windows, czy nie. Nie łuk. Głosuję teraz na regex po tym, jak po pewnym czasie użyłem porównania ciągów, regex „wydaje się” bezpieczniejszy.
W Node.js v6 (i nowszych wersjach) istnieje dedykowany osmoduł, który zapewnia szereg metod narzędziowych związanych z systemem operacyjnym.
Na moim komputerze z systemem Windows 10 zgłasza:
var os = require('os');
console.log(os.type()); // "Windows_NT"
console.log(os.release()); // "10.0.14393"
console.log(os.platform()); // "win32"
Możesz przeczytać pełną dokumentację tutaj: https://nodejs.org/api/os.html#os_os_type
Szukasz macierzystego modułu systemu operacyjnego dla Node.js:
v4: https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_platform
lub v5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_platform
os.platform ()
Zwraca platformę systemu operacyjnego. Możliwe wartości to „darwin”, „freebsd”, „linux”, „sunos” lub „win32”. Zwraca wartość process.platform.
var opsys = process.platform;
if (opsys == "darwin") {
opsys = "MacOS";
} else if (opsys == "win32" || opsys == "win64") {
opsys = "Windows";
} else if (opsys == "linux") {
opsys = "Linux";
}
console.log(opsys) // I don't know what linux is.
const os = require("os"); // Comes with node.js
console.log(os.type());
os.type()wydaje się, że zwraca „Darwin” z wielką literą. Ze względów bezpieczeństwa lepiej byłoby zadzwonić os.type().toLowerCase()przed porównaniem wartości.
To działa dobrze dla mnie
var osvar = process.platform;
if (osvar == 'darwin') {
console.log("you are on a mac os");
}else if(osvar == 'win32'){
console.log("you are on a windows os")
}else{
console.log("unknown os")
}
gdy używasz 32-bitowego węzła w 64-bitowych oknach (takich jak deweloper-węzeł webkit lub atom-shell), platforma process.platform wyśle echo win32
posługiwać się
function isOSWin64() {
return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
}
(sprawdź tutaj po szczegóły)
const path = require('path');
if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}
osmodułu, który jest bardziej ekspresyjny podczas czytania kodu.
Napotkałem ten sam problem z uruchomieniem mojego kodu js węzła na maszynie wirtualnej z systemem Windows na komputerze Mac. Poniższy kod załatwił sprawę.
Zastąpić
process.platform == 'win32'
z
const os = wymagany („os”);
os.platform () == 'win32';