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

Posted

技术标签:

【中文标题】如何使用 Node.js 确定当前的操作系统【英文标题】:How do I determine the current operating system with Node.js 【发布时间】:2012-01-30 19:37:52 【问题描述】:

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

【问题讨论】:

喜欢将模块 Child Processes 与模块 OS 结合起来吗? 这看起来像 ***.com/questions/6551006/… 的副本 ***.com/questions/42524606/… 【参考方案1】:

要使用的变量是process.platform

在 Mac 上,该变量设置为 darwin。在 Windows 上,它设置为 win32(即使是 64 位)。

Current possible values 是:

aix darwin freebsd linux openbsd sunos win32 android(实验性,根据链接)

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

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

【讨论】:

你应该更好地使用操作系统模块,它甚至在文档中。 os.platform 专门 windows 返回 'win32',即使在 64 位操作系统上也是如此。即process.platform === 'win32' 就足够了 我检查了 os.platform 和 process.platform ,它们在 windows 和 mac 上完全相同。我将使用 process.platform,因为它不需要包含 lib。 虽然process.platform === 'win32' 的字符串比较似乎比正则表达式更简洁,而且显然更快。 Mauvis 发布的正则表达式似乎是一个更好的 quality 检查。如果 Node/Windows 都决定返回 win64、winARM 等,或者其他任何东西,大量代码会因字符串比较而中断。我们正在寻找的只是它是否是 Windows。不是拱门。在使用了一段时间的字符串比较之后,我现在投票支持正则表达式,正则表达式“感觉”更安全。 @AndrewTFinnell:Win32 实际上并不意味着“x86 上的 Windows”——x64、ARM 甚至 Itanium 上的 Windows 都是 Win32,因为无论运行什么处理器,Win32 都是 API 的名称在。所以架构与Win32这个名字无关。我认为正则表达式检查更危险,因为其他一些不兼容平台可能会在未来某个时候以“win”字符开头。【参考方案2】:

使用 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"

你可以在这里阅读它的完整文档:https://nodejs.org/api/os.html#os_os_type

【讨论】:

这可行,但仅适用于服务器端代码执行,它不提供客户端代码的平台。只有执行代码的服务器平台。我用 BrowserStack 试了一下,它只给出了作为运行器的 Docker Container 实例的操作系统,而不是在 BrowserStack 上运行的浏览器实例,它可以是 ios 或 Android,或者 Windows 或 OSX。 这解决了我的问题!【参考方案3】:

您正在寻找 Node.js 的操作系统原生模块:

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'); process.platform 也可以工作,不需要:nodejs.org/dist/latest-v4.x/docs/api/… 再次,将 openbsd 添加到列表中 os.platform() 给出输出“浏览器”而不是给出操作系统名称。【参考方案4】:

流程

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

【讨论】:

没有名为“win64”的平台。您可以在此处找到可用值:nodejs.org/api/process.html#process_process_platform 另外,您忘记关闭最后一个 else if os.type() 似乎返回带有大写字母的 'Darwin'。出于安全原因,最好在比较值之前致电os.type().toLowerCase()【参考方案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")

【讨论】:

【参考方案6】:

适合我

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

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

【讨论】:

【参考方案7】:

当您在 64 位窗口(如 node-webkit 或 atom-shell 开发人员)上使用 32 位节点时,process.platform 将回显 win32

使用

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

(详情请查看here)

【讨论】:

【参考方案8】:
var isWin64 = process.env.hasOwnProperty('ProgramFiles(x86)');

【讨论】:

【参考方案9】:
const path = require('path');

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

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。 尽管这在大多数情况下都有效,但我更喜欢使用os 模块,它在阅读代码时更具表现力。【参考方案10】:

我在 Mac 机器上的 Windows VM 上运行我的节点 js 代码时遇到了同样的问题。下面的代码成功了。

替换

process.platform == 'win32'

const os = require('os');

os.platform() == 'win32';

【讨论】:

以上是关于如何使用 Node.js 确定当前的操作系统的主要内容,如果未能解决你的问题,请参考以下文章

node.js 基础操作

Node.js - Mongoose - 在这种情况下,我应该如何分配多个多对一关系?

循环执行 Node JS 中的 fetch 操作

确定我的 Node.js 应用程序当前在哪个 AWS Beanstalk 环境中运行的最佳实践是啥?

如何使用 Node js 操作 DOM?

在 Backand 如何从 node.js 操作上传文件?