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

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

【问题讨论】:

标签: node.js


【解决方案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';

          【讨论】:

            猜你喜欢
            • 2019-07-14
            • 1970-01-01
            • 1970-01-01
            • 2010-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多