Làm cách nào để xác định hệ điều hành hiện tại với Node.js


273

Tôi đang viết một vài tập lệnh shell shell để sử dụng khi phát triển trên nền tảng. Chúng tôi có cả nhà phát triển Mac và Windows. Có một biến tôi có thể kiểm tra trong Node để chạy tệp .sh trong một phiên bản và .bat trong một phiên bản khác không?


Giống như kết hợp mô đun quy trình con với hệ điều hành mô-đun ?
Wolfgang Kuehn

Điều này trông giống như một bản sao của stackoverflow.com/questions/6551006/ từ
Waylon Flinn

Câu trả lời:


482

Biến để sử dụng sẽ là process.platform

Trên Mac biến trở lại darwin. Trên Windows, nó trả về win32(thậm chí trên 64 bit).

Các giá trị hiện tại có thể là:

  • aix
  • darwin
  • freebsd
  • linux
  • openbsd
  • sunos
  • win32

Tôi chỉ đặt cái này ở đầu jakeFile của tôi:

var isWin = process.platform === "win32";

4
Bạn nên sử dụng mô-đun hệ điều hành tốt hơn, ngay cả trong tài liệu. os.pl platform cụ thể
alessioalex

92
cửa sổ trả về 'win32', ngay cả trên hệ thống hoạt động 64 bit. tức process.platform === 'win32'là đủ
Raynos

15
Tôi đã kiểm tra os.pl platform và process.pl platform và chúng giống hệt nhau trên window và mac. Tôi sẽ sử dụng process.pl platform vì nó không yêu cầu bao gồm lib.
Mauvis Ledford

10
Trong khi chuỗi so sánh process.platform === 'win32'có vẻ ngắn gọn hơn regex, và rõ ràng nhanh hơn. Các regex Mauvis đã đăng dường như là một kiểm tra chất lượng tốt hơn . Nếu Node / Windows mỗi quyết định trả lại win64, winARM, v.v. hoặc bất cứ thứ gì khác, một tấn mã sẽ bị phá vỡ với chuỗi so sánh. Tất cả những gì chúng tôi đang tìm kiếm là nếu nó là Windows hay không. Không phải vòm. Tôi bỏ phiếu cho regex tại thời điểm này sau khi đã sử dụng chuỗi so sánh trong một thời gian, regex 'cảm thấy' an toàn hơn.
Andrew T Finnell

8
@AndrewTFinnell: Win32 không thực sự có nghĩa là "Windows trên x86", Wwwindows trên x64, ARM hoặc thậm chí Itanium đều là Win32, vì Win32 là tên của API bất kể bộ xử lý nào đang chạy. Vì vậy, kiến ​​trúc không có gì để làm với tên Win32. Tôi sẽ lập luận rằng kiểm tra regex nguy hiểm hơn, bởi vì một số nền tảng khác, không tương thích có thể bắt đầu bằng cách hình dung các nhân vật "chiến thắng" tại một thời điểm nào đó trong tương lai.
Dietrich Epp

52

Với Node.js v6 (trở lên), có một osmô-đun chuyên dụng , cung cấp một số phương thức tiện ích liên quan đến hệ điều hành.

Trên máy Windows 10 của tôi, nó báo cáo như sau:

var os = require('os');

console.log(os.type()); // "Windows_NT"
console.log(os.release()); // "10.0.14393"
console.log(os.platform()); // "win32"

Bạn có thể đọc tài liệu đầy đủ của nó ở đây: https://nodejs.org/api/os.html#os_os_type


2
Điều này hoạt động, nhưng chỉ để thực thi mã phía máy chủ, nó không cung cấp cho nền tảng của mã máy khách. Chỉ nền tảng của máy chủ thực thi mã. Tôi đã thử nó với BrowserStack và nó chỉ cung cấp cho hệ điều hành của Docker Container phiên bản chạy, chứ không phải phiên bản trình duyệt chạy trên BrowserStack, có thể là iOS hoặc Android, hoặc Windows hoặc OSX.
Seth Eden

liên kết đến trang không tồn tại. Bạn có thể vui lòng cập nhật các liên kết?
Srishti Sinha

49

Bạn đang tìm kiếm mô-đun gốc hệ điều hành cho Node.js:

v4: https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_pl platform

hoặc v5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_pl platform

os.pl platform ()

Trả về nền tảng hệ điều hành. Các giá trị có thể là 'darwin', 'freebsd', 'linux', 'sunos' hoặc 'win32'. Trả về giá trị của process.pl platform.


9
var isWin = (os.pl platform () === 'win32');
thôi thúc

6
process.pl platform
David Braun

Một lần nữa, thêm openbsd vào danh sách
Jam Risser

os.pl platform () cung cấp "trình duyệt" đầu ra thay vì đặt tên os.
Mohd Shahid

16

Quá trình

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.

HĐH

const os = require("os"); // Comes with node.js
console.log(os.type());

4
Không có nền tảng gọi là "win64" . Bạn có thể tìm thấy các giá trị khả dụng tại đây: nodejs.org/api/ process.html # process_ process_pl platform Ngoài ra, bạn đã quên đóng cái khác cuối cùng nếu .
frzsombor

os.type()dường như trả lại 'Darwin' bằng chữ hoa. Vì lý do an toàn, có thể tốt hơn để gọi os.type().toLowerCase()trước khi so sánh các giá trị.
cwouter

6

Cái này làm việc tốt cho tôi

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")
}

4

khi bạn đang sử dụng nút 32 bit trên các cửa sổ 64 bit (như nhà phát triển nút-webkit hoặc trình phát triển vỏ nguyên tử), process.pl platform sẽ lặp lại win32

sử dụng

    function isOSWin64() {
      return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432');
    }

(kiểm tra ở đây để biết chi tiết)


4

Làm việc tốt cho tôi

if (/^win/i.test(process.platform)) {
    // TODO: Windows
} else {
    // TODO: Linux, Mac or something else
}

Công cụ sửa đổi i được sử dụng để thực hiện khớp không phân biệt chữ hoa chữ thường.


2
const path = require('path');

if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}

5
Mặc dù mã này có thể trả lời câu hỏi, việc cung cấp ngữ cảnh bổ sung về cách thức và / hoặc lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời.
Badacadabra

Mặc dù điều đó sẽ hoạt động trong hầu hết các trường hợp, tôi thích sử dụng osmô-đun, điều này có ý nghĩa hơn khi đọc mã.
Stephan


0

Tôi đã phải đối mặt với cùng một vấn đề khi chạy mã js nút của tôi trên Windows VM trên máy mac. Các mã sau đây đã lừa

Thay thế

process.pl platform == 'win32'

với

const os = Yêu cầu ('os');

os.pl platform () == 'win32';

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.