Node.js로 현재 운영 체제를 어떻게 확인합니까?


273

플랫폼에서 개발할 때 사용할 몇 가지 노드 셸 스크립트를 작성 중입니다. 우리는 Mac과 Windows 개발자가 있습니다. 한 인스턴스에서 .sh 파일을 실행하고 다른 인스턴스에서 .bat를 실행하기 위해 Node에서 확인할 수있는 변수가 있습니까?


모듈 자식 프로세스 를 모듈 OS 와 결합하는 것과 같이 ?
Wolfgang Kuehn


답변:


482

사용할 변수는 process.platform

Mac에서는 변수가를 반환합니다 darwin. Windows에서는 win3264 비트에서도 반환 됩니다.

현재 가능한 값 은 다음과 같습니다.

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

방금 jakeFile 상단에 이것을 설정했습니다.

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

4
OS 모듈을 더 잘 사용해야하며 문서에도 있습니다. os.platform 구체적으로
alessioalex

92
Windows는 'win32'64 비트 운영 체제 에서도을 반환 합니다. 즉 process.platform === 'win32'충분하다
Raynos

15
os.platform과 process.platform을 확인했는데 창과 Mac에서 동일합니다. lib를 포함 할 필요가 없으므로 process.platform을 사용합니다.
Mauvis Ledford

10
문자열을 비교하는 동안 process.platform === 'win32' 는 정규식보다 간결하고 분명히 빠릅니다. 정규식 Mauvis가 게시 한 품질 검사 가 더 나은 것 같습니다 . Node / Windows가 모두 win64, winARM 등을 반환하기로 결정한 경우 또는 수많은 코드가 문자열 비교와 함께 중단됩니다. 우리가 찾고있는 것은 Windows인지 아닌지입니다. 아치가 아닙니다. 나는 문자열 비교를 잠시 사용한 후에 정규 표현식에 투표합니다. 정규식은 더 안전합니다.
Andrew T Finnell

8
@AndrewTFinnell : Win32는 실제로 "x86의 Windows"를 의미하지 않습니다. Win32는 실행중인 프로세서에 관계없이 API의 이름이므로 x64, ARM 또는 Itanium의 Windows는 모두 Win32입니다. 따라서 아키텍처는 Win32라는 이름과 관련이 없습니다. 정규식 검사가 더 위험하다고 주장 할 것입니다. 다른 호환되지 않는 플랫폼이 미래의 어느 시점에서 문자 "win"으로 시작될 수 있기 때문 입니다.
Dietrich Epp

52

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으로 시도한 결과 BrowserStack에서 실행되는 브라우저 인스턴스가 아닌 러너 인 Docker Container 인스턴스의 운영 체제 만 제공합니다 .iOS, Android, Windows 또는 OSX 일 수 있습니다.
세스 에덴

페이지에 대한 링크가 없습니다. 당신은 pls 링크를 업데이트 할 수 있습니까?
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');
urish

6
process.platform도 필요없이 작동합니다 : nodejs.org/dist/latest-v4.x/docs/api/…
David Braun

다시 목록에 openbsd를 추가하십시오
Jam Risser

os.platform ()은 os 이름을 지정하는 대신 "browser"출력을 제공합니다.
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 또한 마지막 if 을 닫는 것을 잊었습니다 .
frzsombor

os.type()대문자로 'Darwin'을 반환하는 것 같습니다. 안전상의 이유로 os.type().toLowerCase()값을 비교하기 전에 전화하는 것이 좋습니다 .
cwouter

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
이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
Badacadabra

그것이 대부분의 경우에 효과가 있지만 os코드를 읽을 때 더 표현적인 모듈을 사용 하는 것이 좋습니다.
Stephan


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.