如何使用 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 - Mongoose - 在这种情况下,我应该如何分配多个多对一关系?