如何使用Node.js确定当前的操作系统

Mau*_*ord 233 node.js

我正在编写一些节点shell脚本,以便在平台上进行开发时使用.我们有Mac和Windows开发人员.我可以在Node中检查一个变量,在一个实例中运行.sh文件,在另一个实例中运行.bat吗?

Mau*_*ord 427

要使用的变量是 process.platform

在Mac上,变量返回darwin.在Windows上,它返回win32(即使在64位).

可能的值有:'darwin','freebsd','linux','sunos'或'win32'

我只是将它设置在我的jakeFile的顶部:

var isWin = process.platform === "win32";
Run Code Online (Sandbox Code Playgroud)

  • 即使在64位操作系统上,windows也会返回''win32'.即`process.platform ==='win32'`就足够了 (88认同)
  • 我检查了os.platform和process.platform,它们在window和mac上完全相同.我将使用process.platform,因为它不需要包含lib. (12认同)
  • 虽然`process.platform ==='win32'`的字符串比较看起来比正则表达式更简洁,但显然更快.正则表达式Mauvis发布的似乎是一个更好的_quality_检查.如果Node/Windows都决定返回win64,winARM等,或者其他任何东西,那么大量的代码就会破坏字符串比较.我们所寻找的只是它是否是Windows.不是拱门.我在使用字符串比较一段时间之后投票给正则表达式,正则表达式"感觉"更安全. (10认同)
  • 您应该更好地使用OS模块,甚至在文档中也是如此.特别是os.platform (4认同)
  • @SuperUberDuper`node -p'process.platform'` (3认同)
  • @AndrewTFinnell:Win32实际上并不意味着"x86上的Windows" - x64,ARM甚至Itanium上的Windows都是Win32,因为无论运行什么处理器,Win32都是API的名称.因此该架构与Win32名称无关.我认为正则表达式检查更危险,因为其他一些*不兼容的*平台可能会在未来的某个时刻以"赢"字符开头. (3认同)
  • “如果 Node/Windows 都决定返回 win64、winARM 等,或者其他任何东西,大量代码都会因字符串比较而中断”<-- 我认为这不是正则表达式的一个很好的理由。Node 非常清楚这会破坏所有其他库,因此他们永远不会做这样的破坏性更改。 (3认同)
  • @JF 实际上应该是不带引号的 `node -p process.platform`。使用引号,它只返回字符串“process.platform” (2认同)

ale*_*lex 48

您正在寻找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的值.

  • var isWin =(os.platform()==='win32'); (9认同)
  • process.platform也可以,没有require:https://nodejs.org/dist/latest-v4.x/docs/api/process.html#process_process_platform (5认同)

Ben*_*uer 38

使用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"
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读完整文档:https://nodejs.org/api/os.html

  • 这有效,但仅适用于服务器端代码执行,而不能提供客户端代码的平台。仅服务器平台执行代码。我在BrowserStack上进行了尝试,它仅提供了作为运行器的Docker容器实例的操作系统,而不提供在BrowserStack上运行的浏览器实例(可能是iOS或Android,或者是Windows或OSX)。 (2认同)

Jai*_*dee 13

处理

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.
Run Code Online (Sandbox Code Playgroud)

操作系统

const os = require("os"); // Comes with node.js
console.log(os.type());
Run Code Online (Sandbox Code Playgroud)

  • `os.type()` 似乎返回大写的“Darwin”。出于安全原因,最好在比较值之前调用“os.type().toLowerCase()”。 (5认同)
  • **没有称为“ win64”的平台**。您可以在此处找到可用的值:https://nodejs.org/api/process.html#process_process_platform另外,您忘记了最后一个* else if *。 (3认同)

Vla*_*lad 5

对我来说效果很好

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

i 修饰符用于执行不区分大小写的匹配。


Ade*_*IMM 5

这对我来说很好

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")
}
Run Code Online (Sandbox Code Playgroud)