Node.jsで現在のオペレーティングシステムを確認する方法


273

プラットフォームで開発するときに使用するノードシェルスクリプトをいくつか書いています。MacとWindowsの両方の開発者がいます。あるインスタンスで.shファイルを実行し、別のインスタンスで.batを実行するためにノードでチェックできる変数はありますか?


モジュールの子プロセスをモジュールのOSと組み合わせるのは好きですか?
Wolfgang Kuehn、2011


回答:


482

使用する変数は process.platform

Macでは、変数はを返しますdarwin。Windowsではwin32(64ビットでも)戻ります。

現在可能な値は次のとおりです。

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

これをjakeFileの上部に設定するだけです。

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

4
あなたはOSモジュールをよりよく使うべきです、それはドキュメントにもあります。特にos.platform
alessioalex 2011

92
'win32'64ビットのオペレーションシステムでも、windowsはを返します。つまりprocess.platform === 'win32'、十分です
Raynos、

15
私はos.platformとprocess.platformを確認しましたが、それらはウィンドウとMacでまったく同じです。libを含める必要がないため、process.platformを使用します。
Mauvis Ledford、2012

10
文字列の比較はprocess.platform === 'win32'正規表現よりも簡潔で、明らかに高速です。Mauvisが投稿した正規表現は、より良い品質チェックのようです。Node / Windowsがwin64やwinARMなどを返すことにした場合は、文字列比較で大量のコードが壊れます。私たちが探しているのは、それがWindowsかどうかだけです。アーチではありません。しばらく文字列比較を使用した後、この時点で正規表現に投票します。正規表現はより安全に「感じ」ます。
Andrew T Finnell

8
@AndrewTFinnell:Win32は実際には「Windows on x86」を意味するわけではありません。Win32は、どのプロセッサで実行されているかに関係なく、APIの名前であるため、すべてがWin32です。したがって、アーキテクチャはWin32という名前とは関係ありません。他の互換性のないプラットフォームでは、将来的に「win」という文字で始まる可能性があるため、正規表現チェックの方が危険だと私は主張します。
ディートリッヒエップ2017

53

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


2
これは機能しますが、サーバー側のコード実行の場合のみ、クライアントコードのプラットフォームは提供されません。コードを実行するサーバーのプラットフォームのみ。BrowserStackで試してみたところ、ランナーであるDocker Containerインスタンスのオペレーティングシステムのみが提供され、BrowserStackで実行されているブラウザーインスタンス(iOSまたはAndroid、WindowsまたはOSXなど)は提供されません。
Seth Eden

ページへのリンクが存在しません。リンクを更新できますか?
Srishti Sinha

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

オペレーティングシステムプラットフォームを返します。可能な値は、「darwin」、「freebsd」、「linux」、「sunos」、または「win32」です。process.platformの値を返します。


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

6
必要とせずにprocess.platformは、あまりにも動作します:nodejs.org/dist/latest-v4.x/docs/api/...
デヴィッド・ブラウン

もう一度、openbsdをリストに追加します
Jam Risser

os.platform()は、os名を与える代わりに、「ブラウザ」を出力します。
Mohd Shahid

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.

OS

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

4
「win64」というプラットフォームはありません。使用可能な値は次の場所にあります:nodejs.org/api/process.html#process_process_platformまた、最後のelseを閉じるのを忘れていました。
frzsombor

os.type()大文字で「ダーウィン」を返すようです。安全上の理由から、os.type().toLowerCase()値を比較する前に呼び出すほうがよい場合があります。
12時44分

6

これは私にとってはうまくいきます

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ビットウィンドウで32ビットノードを使用している場合(node-webkitまたはatom-shell開発者のように)、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
このコードは質問に答えることがありますが、問題を解決する方法や理由に関する追加のコンテキストを提供すると、回答の長期的な価値が向上します。
バダカダブラ2017年

ほとんどの場合それでうまくいきosますが、コードを読むときにより表現力のあるモジュールを使用することを好みます。
ステファン


0

MacマシンのWindows VMでノードのjsコードを実行すると同じ問題に直面していました。次のコードでうまくいきました。

交換する

process.platform == 'win32'

const os = require( 'os');

os.platform()== 'win32';

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.