¿Cómo determino el sistema operativo actual con Node.js


273

Estoy escribiendo un par de scripts de shell de nodo para usar cuando desarrolle en una plataforma. Tenemos desarrolladores de Mac y Windows. ¿Hay alguna variable que pueda verificar en Node para ejecutar un archivo .sh en una instancia y .bat en otra?


¿Te gusta combinar los procesos secundarios del módulo con el sistema operativo del módulo ?
Wolfgang Kuehn


Respuestas:


482

La variable a utilizar sería process.platform

En Mac, la variable regresa darwin. En Windows, regresa win32(incluso en 64 bits).

Los valores posibles actuales son:

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

Acabo de configurar esto en la parte superior de mi archivo jake:

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

44
Debería usar mejor el módulo del sistema operativo, incluso está en la documentación. os.platform específicamente
alessioalex

92
Windows regresa 'win32', incluso en sistemas operativos de 64 bits. process.platform === 'win32'es decir, es suficiente
Raynos

15
Verifiqué os.platform y process.platform y son exactamente iguales en windows y mac. Usaré process.platform ya que no requiere incluir una lib.
Mauvis Ledford

10
Mientras que la comparación de cadenas process.platform === 'win32'parece más concisa que la expresión regular, y obviamente más rápida. La expresión regular que Mauvis ha publicado parece ser un mejor control de calidad . Si Node / Windows decidieran devolver win64, winARM, etc., o cualquier otra cosa, una tonelada de código se rompería con la comparación de cadenas. Todo lo que estamos buscando es si es Windows o no. No el arco. Voto por la expresión regular en este momento después de haber usado la comparación de cadenas por un tiempo, la expresión regular 'se siente' más segura.
Andrew T Finnell

8
@AndrewTFinnell: Win32 en realidad no significa "Windows en x86": Windows en x64, ARM o incluso Itanium son todos Win32, porque Win32 es el nombre de la API independientemente del procesador en el que se esté ejecutando. Entonces la arquitectura no tiene nada que ver con el nombre Win32. Yo diría que la verificación de expresiones regulares es más peligrosa, porque alguna otra plataforma incompatible podría comenzar con los personajes "ganar" en algún momento en el futuro.
Dietrich Epp

53

Con Node.js v6 (y superior) hay un osmódulo dedicado , que proporciona varios métodos de utilidad relacionados con el sistema operativo.

En mi máquina con Windows 10 informa lo siguiente:

var os = require('os');

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

Puede leer su documentación completa aquí: https://nodejs.org/api/os.html#os_os_type


2
Esto funciona, pero solo para la ejecución del código del lado del servidor, no proporciona la plataforma del código del cliente. Solo la plataforma del servidor que ejecuta el código. Lo probé con BrowserStack y solo proporciona el sistema operativo de la instancia de Docker Container que es el corredor, no la instancia del navegador que se ejecuta en BrowserStack, que podría ser iOS o Android, o Windows u OSX.
Seth Eden el

el enlace a la página no existe. ¿Pueden actualizar el enlace?
Srishti Sinha

49

Está buscando el módulo nativo del sistema operativo para Node.js:

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

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

os.platform ()

Devuelve la plataforma del sistema operativo. Los valores posibles son 'darwin', 'freebsd', 'linux', 'sunos' o 'win32'. Devuelve el valor de process.platform.


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

66
process.platform también funciona, sin necesidad: nodejs.org/dist/latest-v4.x/docs/api/…
David Braun

Nuevamente, agregue openbsd a la lista
Jam Risser

os.platform () proporciona el "navegador" de salida en lugar de dar el nombre del sistema operativo.
Mohd Shahid

16

Proceso

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

44
No hay una plataforma llamada "win64" . Puede encontrar los valores disponibles aquí: nodejs.org/api/process.html#process_process_platform Además, olvidó cerrar su última opción si .
frzsombor

os.type()parece devolver 'Darwin' con mayúscula. Por razones de seguridad, podría ser mejor llamar os.type().toLowerCase()antes de comparar valores.
cwouter 01 de

6

Esto funciona bien para mi

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

cuando utiliza un nodo de 32 bits en ventanas de 64 bits (como los desarrolladores de nodo-webkit o atom-shell), process.platform se hará eco de win32

utilizar

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

(marque aquí para más detalles)


4

Funciona bien para mi

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

El modificador i se utiliza para realizar coincidencias entre mayúsculas y minúsculas.


2
const path = require('path');

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

55
Si bien este código puede responder la pregunta, proporcionar un contexto adicional con respecto a cómo y / o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
Badacadabra

Aunque eso funcionaría en la mayoría de los casos, preferiría usar el osmódulo, que es más expresivo al leer el código.
Stephan

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

0

Estaba enfrentando el mismo problema al ejecutar mi código de nodo js en Windows VM en la máquina Mac. El siguiente código hizo el truco.

Reemplazar

process.platform == 'win32'

con

const os = require ('os');

os.platform () == 'win32';

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.