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?
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?
Respostas:
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:
aixdarwinfreebsdlinuxopenbsdsunoswin32Acabei de definir isso no topo do meu jakeFile:
var isWin = process.platform === "win32";
'win32', mesmo em sistemas operacionais de 64 bits. ou seja, process.platform === 'win32'é suficiente
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.
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
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.
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.
const os = require("os"); // Comes with node.js
console.log(os.type());
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.
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")
}
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)
const path = require('path');
if (path.sep === "\\") {
console.log("Windows");
} else {
console.log("Not Windows");
}
osmódulo, que é mais expressivo ao ler o código.
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';