Node.js ile mevcut işletim sistemini nasıl belirlerim?


273

Bir platformda geliştirirken kullanmak için birkaç düğüm kabuğu komut dosyası yazıyorum. Hem Mac hem de Windows geliştiricimiz var. Düğümde bir örnekte bir .sh dosyası ve bir örnekte .bat çalıştırmak için kontrol edebileceğim bir değişken var mı?


Modül Alt İşlemlerini modül OS ile birleştirmek gibi mi?
Wolfgang Kuehn


Yanıtlar:


482

Kullanılacak değişken process.platform

Mac'te değişken geri döner darwin. Windows'da geri döner win32(64 bit olsa bile).

Mevcut olası değerler :

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

Bunu jakeFile'ımın en üstüne ayarladım:

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

4
OS modülünü daha iyi kullanmalısınız, belgelerde bile. os.platform özellikle
alessioalex

92
Windows 'win32'64 bit işletim sistemlerinde bile geri döner . yani process.platform === 'win32'yeterlidir
Raynos

15
Os.platform ve process.platform'u kontrol ettim ve pencere ve mac'ta tamamen aynılar. Bir lib eklemeyi gerektirmediği için process.platform'u kullanacağım.
Mauvis Ledford

10
Karşılaştırma dizesi process.platform === 'win32'normalden daha kısa ve daha hızlı görünüyor. Mauvis'in yazdığı regex, daha iyi bir kalite kontrolü gibi görünüyor . Düğüm / Windows her biri win64, winARM, vb. Veya başka bir şey döndürmeye karar verdiyse, dize karşılaştırmasıyla bir ton kod kırılır. Tek aradığımız Windows olup olmadığı. Kemer değil. Ben dizge karşılaştırma bir süre kullandıktan sonra regex için oy, 'regex' daha güvenli hissediyor.
Andrew T Finnell

8
@AndrewTFinnell: Win32 aslında "x86 üzerinde Windows" anlamına gelmez — x64, ARM ve hatta Itanium üzerindeki pencerelerin tümü Win32'dir, çünkü Win32 üzerinde çalıştığı işlemden bağımsız olarak API'nin adıdır. Yani mimarinin Win32 adıyla bir ilgisi yok. Normal ifade kontrolünün daha tehlikeli olduğunu savunuyorum, çünkü diğer bazı uyumsuz platformlar muhtemelen gelecekte bir noktada "kazan" karakterleriyle başlayabilir.
Dietrich Epp

52

Node.js v6 (ve üstü) ile os, işletim sistemiyle ilgili bir dizi yardımcı yöntem sağlayan özel bir modül vardır .

Windows 10 makinemde aşağıdakileri rapor ediyor:

var os = require('os');

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

Belgelerin tamamını buradan okuyabilirsiniz: https://nodejs.org/api/os.html#os_os_type


2
Bu çalışır, ancak yalnızca sunucu tarafı kod yürütme için, istemci kodunun platformunu vermez. Yalnızca kodu yürüten sunucunun platformu. BrowserStack ile denedim ve sadece tarayıcı olan Docker Container örneğinin işletim sistemini, iOS veya Android veya Windows veya OSX olabilecek BrowserStack üzerinde çalışan tarayıcı örneğini değil.
Seth Eden

sayfanın bağlantısı mevcut değil. Lütfen bağlantıyı güncelleyebilir misiniz?
Srishti Sinha

49

Node.js için işletim sistemi yerel modülünü arıyorsunuz:

sürüm 4: https://nodejs.org/dist/latest-v4.x/docs/api/os.html#os_os_platform

veya v5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_platform

os.platform ()

İşletim sistemi platformunu döndürür. Olası değerler 'darwin', 'freebsd', 'linux', 'sunos' veya 'win32'. Process.platform'un değerini döndürür.


9
var isWin = (os.platform () === 'win32');
9'da urish

6
process.platform bir zorunluluk olmadan da çalışır: nodejs.org/dist/latest-v4.x/docs/api/…
David Braun

Listeye openbsd ekleyin
Jam Risser

os.platform (), os adı vermek yerine "tarayıcı" çıktısı verir.
Mohd Shahid

16

süreç

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.

işletim sistemi

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

4
"Win64" diye bir platform yoktur . Burada kullanılabilir değerleri bulabilirsiniz: nodejs.org/api/process.html#process_process_platform Ayrıca, son kapatmayı unuttu eğer başka .
frzsombor

os.type()'Darwin'i büyük harfle geri dönüyor gibi görünüyor. Güvenlik nedeniyle, os.type().toLowerCase()değerleri karşılaştırmadan önce aramak daha iyi olabilir .
cwouter

6

Bu benim için iyi çalışıyor

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

64 bit pencerelerde (düğüm-webkit veya atom kabuğu geliştiricileri gibi) 32 bit düğümü kullandığınızda, process.platform win32'yi yankılanacaktır

kullanım

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

( ayrıntılar için buraya bakın)


4

Benim için iyi çalışıyor

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

İ değiştiricisi büyük / küçük harfe duyarlı olmayan eşleştirme gerçekleştirmek için kullanılır.


2
const path = require('path');

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

5
Bu kod soruyu cevaplayabilirken, sorunun nasıl ve / veya neden çözüldüğüne dair ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
Badacadabra

Bu çoğu durumda işe yarayacak olsa da os, kodu okurken daha etkileyici olan modülü kullanmayı tercih ederim .
Stephan

1
var isWin64 = process.env.hasOwnProperty('ProgramFiles(x86)');

0

Mac makinedeki Windows VM'de düğüm js kodumu çalıştırırken aynı sorunla karşı karşıyaydım. Aşağıdaki kod hile yaptı.

değiştirmek

process.platform == 'win32'

ile

const os = gerektirir ('os');

os.platform () == 'win32';

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.