Я пишу пару сценариев оболочки для использования при разработке на платформе. У нас есть разработчики как для 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 на компьютере Mac. Следующий код добился цели.
замещать
process.platform == 'win32'
с участием
const os = require ('os');
os.platform () == 'win32';