Como determino o sistema operacional atual com o Node.js


273

Estou escrevendo alguns scripts de shell de nó para uso no desenvolvimento em uma plataforma. Temos desenvolvedores para Mac e Windows. Existe uma variável que eu possa procurar no Node para executar um arquivo .sh em uma instância e .bat em outra?


Como combinar o módulo Processos filho com o módulo OS ?
Wolfgang Kuehn

Isso parece com uma duplicata do stackoverflow.com/questions/6551006/… #
Waylon Flinn

Respostas:


482

A variável a ser usada seria process.platform

No Mac, a variável retorna darwin. No Windows, ele retorna win32(mesmo em 64 bits).

Os possíveis valores atuais são:

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

Acabei de definir isso no topo do meu jakeFile:

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

4
Você deve usar o módulo OS melhor, é até na documentação. os.platform especificamente
alessioalex 30/12/11

92
o windows retorna 'win32', mesmo em sistemas operacionais de 64 bits. ou seja, process.platform === 'win32'é suficiente
Raynos

15
Eu verifiquei os.platform e process.platform e eles são exatamente o mesmo na janela e no mac. Usarei process.platform, pois não requer a inclusão de uma lib.
Mauvis Ledford

10
Enquanto a comparação de strings process.platform === 'win32'parece mais concisa que a regex, e obviamente mais rápida. O regex publicado por Mauvis parece ser uma verificação de melhor qualidade . Se o Node / Windows decidisse retornar win64, winARM, etc. ou qualquer outra coisa, uma tonelada de código quebraria com a comparação de strings. Tudo o que estamos procurando é se é Windows ou não. Não é o arco. No momento, voto na regex depois de ter usado a comparação de string por um tempo, a regex 'se sente' mais segura.
Andrew T Finnell

8
@AndrewTFinnell: Win32 na verdade não significa "Windows on x86" - Windows em x64, ARM ou mesmo Itanium são todos Win32, porque Win32 é o nome da API, independentemente do processador em que está sendo executado. Portanto, a arquitetura não tem nada a ver com o nome Win32. Eu argumentaria que a verificação do regex é mais perigosa, porque alguma outra plataforma incompatível pode começar com os personagens "vencer" em algum momento no futuro.
Dietrich Epp

53

Com o Node.js v6 (e superior), existe um osmódulo dedicado , que fornece vários métodos de utilitário relacionados ao sistema operacional.

Na minha máquina Windows 10, ele informa o seguinte:

var os = require('os');

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

Você pode ler a documentação completa aqui: https://nodejs.org/api/os.html#os_os_type


2
Isso funciona, mas apenas para a execução do código do lado do servidor, não fornece a plataforma do código do cliente. Somente a plataforma do servidor executando o código. Eu tentei com o BrowserStack e ele fornece apenas o sistema operacional da instância do Docker Container que é o corredor, não a instância do navegador em execução no BrowserStack, que poderia ser iOS ou Android, ou Windows ou OSX.
Seth Eden

o link para a página não existe. Você pode atualizar o link?
Srishti Sinha 6/04

49

Você está procurando o módulo nativo do SO para Node.js:

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

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

os.platform ()

Retorna a plataforma do sistema operacional. Os valores possíveis são 'darwin', 'freebsd', 'linux', 'sunos' ou 'win32'. Retorna o valor de process.platform.


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

6
process.platform funciona também, sem exigir: nodejs.org/dist/latest-v4.x/docs/api/...
David Braun

Mais uma vez, adicione openbsd à lista
Jam Risser

os.platform () fornece "browser" de saída em vez de dar o nome do sistema operacional.
Mohd Shahid

16

Processo

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
Não existe uma plataforma chamada "win64" . Você pode encontrar os valores disponíveis aqui: nodejs.org/api/process.html#process_process_platform Além disso, você esqueceu de fechar o último se .
Frzsombor 26/04/19

os.type()parece retornar 'Darwin' com maiúsculas. Por razões de segurança, pode ser melhor ligar os.type().toLowerCase()antes de comparar valores.
cwouter

6

Este trabalho é bom para mim

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

Quando você estiver usando o nó de 32 bits nas janelas de 64 bits (como desenvolvedores do node-webkit ou atom-shell), process.platform ecoará o win32

usar

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

(confira aqui para detalhes)


4

Funciona bem para mim

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

O modificador i é usado para executar a correspondência que não diferencia maiúsculas de minúsculas.


2
const path = require('path');

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

5
Embora esse código possa responder à pergunta, fornecer um contexto adicional a respeito de como e / ou por que ele resolve o problema melhoraria o valor a longo prazo da resposta.
Badacadabra 7/07

Mesmo que isso funcionasse na maioria dos casos, eu preferiria usar o osmódulo, que é mais expressivo ao ler o código.
237 Stephan Stephan

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

0

Eu estava enfrentando o mesmo problema ao executar o código js do meu nó na VM do Windows na máquina mac. O código a seguir fez o truque.

Substituir

process.platform == 'win32'

com

const os = require ('os');

os.platform () == 'win32';

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.