मैं Node.js के साथ वर्तमान ऑपरेटिंग सिस्टम का निर्धारण कैसे करूं


273

मैं एक मंच पर विकसित करते समय उपयोग के लिए नोड शेल स्क्रिप्ट की एक जोड़ी लिख रहा हूँ। हमारे पास मैक और विंडोज डेवलपर्स दोनों हैं। क्या कोई चर है जिसे मैं नोड में एक .sh फ़ाइल को एक उदाहरण में और .bat को दूसरे में चलाने के लिए जाँच कर सकता हूँ?


मॉड्यूल ओएस के साथ मॉड्यूल बाल प्रक्रियाओं के संयोजन की तरह ?
वोल्फगैंग कुह्न


जवाबों:


482

उपयोग करने के लिए चर होगा process.platform

मैक पर परिवर्तनशील रिटर्न darwin। विंडोज पर, यह win32(यहां तक ​​कि 64 बिट पर) लौटता है ।

वर्तमान संभावित मूल्य हैं:

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

मैंने इसे अपने जेकफिल के शीर्ष पर सेट किया है:

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

4
आपको ओएस मॉड्यूल का बेहतर उपयोग करना चाहिए, यह प्रलेखन में भी है। os.platform विशेष रूप से
alessioalex

92
'win32'64 बिट ऑपरेशन सिस्टम पर भी विंडोज़ रिटर्न । यानी process.platform === 'win32'पर्याप्त है
रेयनोस डिस

15
मैंने os.platform और process.platform की जाँच की और वे खिड़की और मैक पर सटीक एक ही हैं। मैं process.platform का उपयोग करूँगा क्योंकि इसके लिए एक lib की आवश्यकता नहीं है।
मौविस लेडफोर्ड

10
जबकि स्ट्रिंग तुलना process.platform === 'win32'रेगेक्स की तुलना में अधिक संक्षिप्त लगती है, और स्पष्ट रूप से तेज है। रेगेक्स मौविस ने पोस्ट किया है कि यह एक बेहतर गुणवत्ता जांच है। यदि नोड / विंडोज ने win64, winARM इत्यादि को वापस करने का फैसला किया, या कुछ और एक टन कोड स्ट्रिंग तुलना के साथ टूट जाएगा। हम सब देख रहे हैं कि यह विंडोज है या नहीं। मेहराब नहीं। मैं इस समय रेगेक्स के लिए वोट करता हूं, थोड़ी देर के लिए स्ट्रिंग की तुलना करने के बाद रेगेक्स 'सुरक्षित' लगता है।
एंड्रयू टी फिनेल

8
@AndrewTFinnell: Win32 का वास्तव में मतलब नहीं है "x86 पर विंडोज" - x64, ARM, या यहां तक ​​कि इटेनियम पर विंडोज सभी Win32 हैं, क्योंकि Win32 एपीआई का नाम है चाहे वह किस प्रोसेसर पर चल रहा हो। तो आर्किटेक्चर का Win32 नाम से कोई लेना-देना नहीं है। मैं तर्क दूंगा कि रेगेक्स चेक अधिक खतरनाक है, क्योंकि कुछ अन्य, असंगत मंच भविष्य में कुछ बिंदु पर "जीत" अक्षर से शुरू कर सकते हैं।
डेट्रिच एप

52

Node.js v6 (और ऊपर) के साथ एक समर्पित osमॉड्यूल है, जो कई ऑपरेटिंग सिस्टम से संबंधित उपयोगिता विधियों को प्रदान करता है।

मेरे विंडोज 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


2
यह काम करता है, लेकिन केवल सर्वर साइड कोड निष्पादन के लिए, यह क्लाइंट कोड का प्लेटफॉर्म नहीं देता है। कोड को निष्पादित करने वाले सर्वर का केवल प्लेटफॉर्म। मैंने इसे BrowserStack के साथ आज़माया और यह केवल Docker कंटेनर इंस्टेंस का ऑपरेटिंग सिस्टम देता है जो कि रनर है, BrowserStack पर चलने वाले ब्राउज़र का उदाहरण नहीं है, जो iOS या Android, या Windows या OSX हो सकता है।
सेथ एडेन

पृष्ठ का लिंक मौजूद नहीं है। क्या आप लिंक को अपडेट कर सकते हैं?
सृष्टि सिन्हा

49

आप Node.js के लिए OS के मूल मॉड्यूल की तलाश कर रहे हैं:

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 ()

ऑपरेटिंग सिस्टम प्लेटफ़ॉर्म लौटाता है। संभावित मूल्य 'डार्विन', 'फ्रीबस्ड', 'लिनक्स', 'सनोस' या 'विन 32' हैं। Process.platform का मान लौटाता है।


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

6
process.platform भी आवश्यकता के बिना काम करता है: नोडज ..org
डेविड

दोबारा, सूची में ओपनबेड्स जोड़ें
जाम रिज़रसर

os.platform () ओएस नाम देने के बजाय आउटपुट "ब्राउज़र" देता है।
मोहम्मद शाहिद

16

प्रक्रिया

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());

4
"Win64" नामक कोई मंच नहीं है । आप उपलब्ध मूल्यों यहाँ पा सकते हैं: nodejs.org/api/process.html#process_process_platform इसके अलावा, आप अपने पिछले बंद करने के लिए भूल गया और कुछ करता है, तो
frzsombor

os.type()एक अपरकेस के साथ 'डार्विन' को वापस करने के लिए लगता है। सुरक्षा कारणों os.type().toLowerCase()से मूल्यों की तुलना करने से पहले कॉल करना बेहतर हो सकता है ।
cwouter


4

जब आप 64 बिट विंडोज़ (नोड-वेबकिट या परमाणु-शेल डेवलपर्स की तरह) पर 32 बिट्स नोड का उपयोग कर रहे हैं, तो process.platform win32 को गूंज देगा

उपयोग

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

( विवरण के लिए यहां देखें)


4

मेरे लिए ठीक काम करता है

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

केस-असंवेदनशील मिलान करने के लिए i संशोधक का उपयोग किया जाता है।


2
const path = require('path');

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

5
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
बैदाकद्र

हालांकि यह ज्यादातर मामलों में काम करेगा, फिर भी मैं osमॉड्यूल का उपयोग करना पसंद करूंगा , जो कोड को पढ़ते समय अधिक स्पष्ट है।
Stephan


0

मैं मैक मशीन पर Windows VM पर अपना नोड js कोड चलाने के लिए एक ही समस्या का सामना कर रहा था। निम्नलिखित कोड ने चाल चली।

बदलने के

process.platform == 'win32'

साथ में

const os = आवश्यकता ('os');

os.platform () == 'win32';

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.