Я пишу пару скриптів оболонок вузлів для використання під час розробки на платформі. У нас є і розробники Mac, і Windows. Чи є змінна, яку я можу перевірити в Node, щоб запустити .sh файл в одному екземплярі, а .bat в іншому?
Я пишу пару скриптів оболонок вузлів для використання під час розробки на платформі. У нас є і розробники Mac, і Windows. Чи є змінна, яку я можу перевірити в Node, щоб запустити .sh файл в одному екземплярі, а .bat в іншому?
Відповіді:
Змінна для використання буде process.platform
На Mac змінна повертається darwin. У Windows він повертається win32(навіть на 64 біт).
aixdarwinfreebsdlinuxopenbsdsunoswin32Я просто встановив це у верхній частині свого jakeFile:
var isWin = process.platform === "win32";
'win32'навіть на 64-бітних операційних системах. тобто process.platform === 'win32'достатньо
process.platform === 'win32'здається більш коротким, ніж регулярний вираз, і, очевидно, швидше. Регекс Mauvis розмістив, здається, перевірка на кращу якість . Якщо Node / Windows кожен вирішив повернути win64, winARM тощо, або що-небудь інше, тона коду порушиться зі порівнянням рядків. Все, що ми шукаємо - це Windows чи ні. Не арка. У цей час я голосую за регулярний вимір після того, як деякий час використовував порівняння рядків, регулярний вираз «почувається» безпечнішим.
З Node.js v6 (і вище) є виділений osмодуль, який надає ряд корисних методів, пов'язаних з операційною системою.
На моїй машині Windows 10 він повідомляє про наступне:
var os = require('os');
console.log(os.type()); // "Windows_NT"
console.log(os.release()); // "10.0.14393"
console.log(os.platform()); // "win32"
Повну документацію ви можете прочитати тут: https://nodejs.org/api/os.html#os_os_type
Ви шукаєте власний модуль ОС для Node.js:
v4: https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_platform
або v5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_platform
os.platform ()
Повертає платформу операційної системи. Можливі значення: "darwin", "freebsd", "linux", "sunos" або "win32". Повертає значення 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()здається, повертає «Дарвін» з великої літери. З міркувань безпеки може бути краще зателефонувати os.type().toLowerCase()перед порівнянням значень.
Це добре працює для мене
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")
}
коли ви використовуєте 32-бітний вузол у 64-бітових вікнах (як-от розробники node-webkit або atom-shell), process.platform буде лунати win32
використання
function isOSWin64() {
return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
}
(перевірте тут деталі)
const path = require('path');
if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}
osмодуль, який є більш виразним при читанні коду.
Я зіткнувся з тією ж проблемою, запустивши свій код js вузла в Windows VM на комп'ютері Mac. Наступний код зробив свою справу.
Замініть
process.platform == 'win32'
з
const os = вимагати ('os');
os.platform () == 'win32';