Come posso determinare l'attuale sistema operativo con Node.js


273

Sto scrivendo un paio di script di shell di nodo da utilizzare quando si sviluppa su una piattaforma. Abbiamo sviluppatori sia Mac che Windows. Esiste una variabile che posso verificare in Node per eseguire un file .sh in un'istanza e .bat in un'altra?


Come combinare i processi figlio del modulo con il sistema operativo del modulo ?
Wolfgang Kuehn,


Risposte:


482

La variabile da usare sarebbe process.platform

Su Mac la variabile ritorna darwin. Su Windows, ritorna win32(anche a 64 bit).

I valori attuali possibili sono:

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

Ho appena impostato questo in cima al mio jakeFile:

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

4
Dovresti usare meglio il modulo OS, è anche nella documentazione. os.platform specificamente
alessioalex il

92
Windows ritorna 'win32', anche su sistemi operativi a 64 bit. cioè process.platform === 'win32'è sufficiente
Raynos il

15
Ho controllato os.platform e process.platform e sono esattamente gli stessi su windows e mac. Userò process.platform poiché non richiede l'inclusione di una lib.
Mauvis Ledford,

10
Mentre il confronto delle stringhe process.platform === 'win32'sembra più conciso del regex e ovviamente più veloce. Il regex pubblicato da Mauvis sembra essere un controllo di qualità migliore . Se Nodo / Windows decidessero tutti di restituire win64, winARM, ecc. O qualsiasi altra cosa, una tonnellata di codice si spezzerebbe con il confronto di stringhe. Tutto ciò che stiamo cercando è se è Windows o no. Non l'arco. Voto per il regex in questo momento dopo aver usato il confronto delle stringhe per un po ', il regex "sembra" più sicuro.
Andrew T Finnell,

8
@AndrewTFinnell: Win32 in realtà non significa "Windows su x86": Windows su x64, ARM o persino Itanium sono tutti Win32, perché Win32 è il nome dell'API indipendentemente dal processore su cui è in esecuzione. Quindi l'architettura non ha nulla a che fare con il nome Win32. Direi che il controllo regex è più pericoloso, perché un'altra piattaforma incompatibile potrebbe concepibilmente iniziare con i personaggi "vincere" ad un certo punto in futuro.
Dietrich Epp,

53

Con Node.js v6 (e versioni successive) è presente un osmodulo dedicato , che fornisce numerosi metodi di utilità relativi al sistema operativo.

Sul mio computer Windows 10 riporta quanto segue:

var os = require('os');

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

Puoi leggere la documentazione completa qui: https://nodejs.org/api/os.html#os_os_type


2
Funziona, ma solo per l'esecuzione del codice lato server, non fornisce la piattaforma del codice client. Solo la piattaforma del server che esegue il codice. L'ho provato con BrowserStack e fornisce solo il sistema operativo dell'istanza Docker Container che è il corridore, non l'istanza del browser in esecuzione su BrowserStack, che potrebbe essere iOS o Android, oppure Windows o OSX.
Seth Eden,

il collegamento alla pagina non esiste. Potete aggiornare il link?
Srishti Sinha,

49

Stai cercando il modulo nativo del sistema operativo per 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 ()

Restituisce la piattaforma del sistema operativo. I valori possibili sono 'darwin', 'freebsd', 'linux', 'sunos' o 'win32'. Restituisce il valore di process.platform.


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

6
process.platform funziona anche senza necessità: nodejs.org/dist/latest-v4.x/docs/api/…
David Braun

Ancora una volta, aggiungi openbsd all'elenco
Jam Risser,

os.platform () fornisce l'output "browser" anziché dare il nome os.
Mohd Shahid,

16

Processi

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
Non esiste una piattaforma chiamata "win64" . Puoi trovare i valori disponibili qui: nodejs.org/api/process.html#process_process_platform Inoltre, hai dimenticato di chiudere l'ultimo altro se .
frzsombor,

os.type()sembra restituire "Darwin" con lettere maiuscole. Per motivi di sicurezza potrebbe essere meglio chiamare os.type().toLowerCase()prima di confrontare i valori.
cwouter,

6

Questo funziona bene per me

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 si utilizza il nodo 32 bit su finestre a 64 bit (come gli sviluppatori node-webkit o atom-shell), process.platform farà eco a win32

uso

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

(controlla qui per i dettagli)


4

Funziona bene per me

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

Il modificatore i viene utilizzato per eseguire la corrispondenza senza distinzione tra maiuscole e minuscole.


2
const path = require('path');

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

5
Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a come e / o perché risolve il problema migliorerebbe il valore a lungo termine della risposta.
Badacadabra,

Anche se funzionerebbe nella maggior parte dei casi, preferirei usare il osmodulo, che è più espressivo durante la lettura del codice.
Stephan,

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

0

Stavo affrontando lo stesso problema con il mio codice js del nodo su VM Windows su mac machine. Il seguente codice ha funzionato.

Sostituire

process.platform == 'win32'

con

const os = require ('os');

os.platform () == 'win32';

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.