আমি কিভাবে নোড.জেএস সহ বর্তমান অপারেটিং সিস্টেমটি নির্ধারণ করব


273

প্ল্যাটফর্মে বিকাশ করার সময় আমি কয়েকটি নোড শেল স্ক্রিপ্ট ব্যবহার করছি। আমাদের ম্যাক এবং উইন্ডোজ উভয়ই বিকাশকারী রয়েছে। নোডে আমি একটি উদাহরণে .sh ফাইল চালানোর জন্য নোডে এবং অন্যথায় .bat ফাইলটি পরীক্ষা করতে পারি কি কোনও ভেরিয়েবল আছে?


মডিউল ওএসের সাথে শিশু প্রসেসগুলি সংযুক্ত করার মতো ?
ওল্ফগ্যাং কুহেন


উত্তর:


482

ব্যবহারের পরিবর্তনশীল হবে process.platform

ম্যাকের উপর চলকটি প্রদান করে darwin। উইন্ডোজে এটি ফিরে আসে win32(bit৪ বিট এমনকি)।

বর্তমান সম্ভাব্য মানগুলি হ'ল:

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

আমি এটিকে আমার জ্যাকফাইলের শীর্ষে রেখেছি:

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

4
আপনার ওএস মডিউলটি আরও ভাল ব্যবহার করা উচিত, এটি এমনকি ডকুমেন্টেশনেও। os.platform সুনির্দিষ্ট
20

92
উইন্ডোজ ফিরে আসে 'win32', এমনকি 64 বিট অপারেশন সিস্টেমে। অর্থাত্ process.platform === 'win32'যথেষ্ট
রায়নস

15
আমি ওস.প্ল্যাটফর্ম এবং প্রসেস.প্ল্যাটফর্মটি যাচাই করেছিলাম এবং সেগুলি উইন্ডো এবং ম্যাকের ঠিক একই। আমি প্রক্রিয়া.প্ল্যাটফর্মটি ব্যবহার করব যেহেতু এটির কোনও লিবিব অন্তর্ভুক্ত নয়।
মাওভিস লেডফোর্ড

10
স্ট্রিং process.platform === 'win32'এর তুলনাটি রেজেক্সের চেয়ে আরও সংক্ষিপ্ত এবং সম্ভবত দ্রুততর বলে মনে হচ্ছে। রেজেক্স মাউভিস পোস্ট করেছেন এমনটি আরও ভাল মানের চেক বলে মনে হচ্ছে । যদি নোড / উইন্ডোজ প্রতিটি উইন 6464, উইনআরএম, ইত্যাদি, বা অন্য কোনও কিছু ফেরত দেওয়ার সিদ্ধান্ত নিয়ে থাকে তবে স্ট্রিং তুলনা করে একটি টন কোড ভাঙবে। আমরা যা খুঁজছি তা হ'ল এটি উইন্ডোজ কিনা। খিলান না। আমি স্ট্রিংকে কিছু সময়ের জন্য তুলনা করার পরে এই রেজেজকে ভোট দিই, রেজেক্সটি 'নিরাপদ' মনে করে।
অ্যান্ড্রু টি ফিনেল

8
@ অ্যান্ড্রুটিফিনেল: উইন 32 এর অর্থ আসলে "x86 এর উপর উইন্ডোজ" নয় x এক্স 64, এআরএম, এমনকি ইটানিয়ামের উইন্ডোগুলি সমস্ত উইন 32, কারণ উইন 32 এটির কোনও প্রসেসর চালু না করেই API এর নাম। সুতরাং উইন্ডোয়ারটির সাথে উইন 32 নামটির কোনও সম্পর্ক নেই। আমি যুক্তি দিয়ে বলব যে রেজেক্স চেকটি আরও বিপজ্জনক, কারণ কিছু অন্যান্য, বেমানান প্ল্যাটফর্ম ভবিষ্যতে কোনও মুহূর্তে "জয়" অক্ষরগুলি দিয়ে অনুমেয়ভাবে শুরু করতে পারে।
ডায়েটারিচ এপ্প

52

নোড.জেএস ভি With (এবং উপরে) এর সাথে একটি উত্সর্গীকৃত 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
এটি কাজ করে তবে কেবল সার্ভার সাইড কোড সম্পাদনের জন্য এটি ক্লায়েন্ট কোডের প্ল্যাটফর্ম দেয় না। কোডটি কার্যকর করার জন্য কেবল সার্ভারের প্ল্যাটফর্ম। আমি এটি ব্রাউজারস্ট্যাক দিয়ে চেষ্টা করেছি এবং এটি কেবল ডকার কনটেইনার উদাহরণটির অপারেটিং সিস্টেম দেয় যা রানার, ব্রাউজার স্ট্যাকে চলমান ব্রাউজার উদাহরণ নয়, যা আইওএস বা অ্যান্ড্রয়েড বা উইন্ডোজ বা ওএসএক্স হতে পারে।
শেঠ ইডেন

পৃষ্ঠার লিঙ্কটি বিদ্যমান নেই। আপনি লিঙ্ক আপডেট করতে পারেন?
সৃস্টি সিনহা

49

আপনি নোড.জেএস এর জন্য ওএস নেটিভ মডিউলটি সন্ধান করছেন:

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

বা ভি 5: https://nodejs.org/dist/latest-v5.x/docs/api/os.html#os_os_platform

os.platform ()

অপারেটিং সিস্টেম প্ল্যাটফর্মটি ফেরত দেয়। সম্ভাব্য মানগুলি হ'ল 'ডারউইন', 'ফ্রিবিএসডি', 'লিনাক্স', 'সানোস' বা 'উইন 32'। প্রক্রিয়া.প্ল্যাটফর্মের মান প্রদান করে।


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

6
প্রক্রিয়া.প্ল্যাটফর্মটি বিনা প্রয়োজনেও কাজ করে: nodejs.org/dist/latest-v4.x/docs/api/…
ডেভিড ব্রাউন

আবার, তালিকায় ওপেনবিএসডি যুক্ত করুন
জাম

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 এছাড়াও, আপনি যদি আপনার শেষটি বন্ধ করতে ভুলে যান তবে
ফ্রিজসোম্বর

os.type()মনে হয় 'ডারউইন' বড় হাতের সাথে ফিরে এসেছে। সুরক্ষার কারণে os.type().toLowerCase()মানগুলির তুলনা করার আগে কল করা ভাল ।
cwouter


4

আপনি যখন bits৪ বিট উইন্ডোতে 32 নট নোড ব্যবহার করছেন (যেমন নোড-ওয়েবকিট বা অ্যাটম শেল বিকাশকারী), প্রক্রিয়া.প্ল্যাটফর্ম উইন 32 প্রতিধ্বনিত হবে

ব্যবহার

    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
}

আই-মডিফায়ার কেস-সংবেদনশীল মিলটি সম্পাদন করতে ব্যবহৃত হয়।


2
const path = require('path');

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

5
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
বাদাচাদাবরা

যদিও এটি বেশিরভাগ ক্ষেত্রে কাজ করবে, আমি osমডিউলটি ব্যবহার করতে পছন্দ করব যা কোডটি পড়ার সময় আরও অভিব্যক্তিপূর্ণ।
স্টিফান


0

আমি ম্যাক মেশিনে উইন্ডোজ ভিএম এ আমার নোড জেএস কোড চালিয়ে একই সমস্যার মুখোমুখি ছিলাম। নিম্নলিখিত কোডটি কৌশলটি করেছে।

প্রতিস্থাপন করা

প্রক্রিয়া.প্ল্যাটফর্ম == 'win32'

সঙ্গে

কনস্ট ওস = প্রয়োজনীয় ('ওএস');

os.platform () == 'win32';

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.