os.platform() 返回 darwin 而不是 OSX

Posted

技术标签:

【中文标题】os.platform() 返回 darwin 而不是 OSX【英文标题】:os.platform() returns darwin instead of OSX 【发布时间】:2016-11-30 06:38:22 【问题描述】:
os.platform();

上面的 JS 指令返回的是 OS 的名字。

在 Ubuntu 上运行时返回

'linux'

在Macbook上运行时返回

'darwin'

我想知道为什么不返回 osx ,unixbsd.. ?

darwin是 osx 的一个分支吗?

如何使用Node.js获取MAC下操作系统的类型?

【问题讨论】:

【参考方案1】:

Darwin 不是 OSX,OSX 是 Darwin。

Darwin 是 OSX 的核心,同样,Linux 是 Debian、Ubuntu 和所有其他 Linux 发行版的核心。

因此,尽管您可以 100% 确定任何 Apple 产品(macOS、OSX、ios、watchOS、tvOS)都会返回 Darwin,但从技术上讲,假设 darwin 永远只是那些操作系统是不正确的,因为有些低调存在开源项目,例如 PureDarwin,这些项目也会返回 darwin

但是,我不知道除 OSX 之外的任何其他基于达尔文的操作系统的 node.js 的任何(官方)端口,所以在实践中,是的,如果你得到darwin,你可以确信它是 OSX。

【讨论】:

【参考方案2】:

Darwin 是 OS X 的底层平台。

要获取 OS X 版本,您可以通过命令行(或子进程)执行此操作:defaults read loginwindow SystemVersionStampAsStringsw_vers -productVersion

通过 C/C++ 获取版本(您可以编写绑定以从节点访问):

// compile with: g++ osx_ver.cc -I/Developer/Headers/FlatCarbon -framework CoreServices
#include <Gestalt.h>
#include <stdio.h>

int main() 
  SInt32 majorVersion, minorVersion, bugFixVersion;

  Gestalt(gestaltSystemVersionMajor, &majorVersion);
  Gestalt(gestaltSystemVersionMinor, &minorVersion);
  Gestalt(gestaltSystemVersionBugFix, &bugFixVersion);

  printf("%d.%d.%d", majorVersion, minorVersion, bugFixVersion);

  return 0;

注意:上面显示的 Gestalt() 用法自 OS X 10.8 起已弃用,但它的替换似乎要到 OS X 10.10 才可用,因此您可能需要改用 Objective-C ([processInfo operatingSystemVersion]) 并继续分支API 可用性就像在 Chromium 中完成的 here。

【讨论】:

【参考方案3】:

Darwin 是苹果给 OS X 的原始名称。之所以这样命名,是因为它是操作系统演进中的 NeXT 步骤。

【讨论】:

以上是关于os.platform() 返回 darwin 而不是 OSX的主要内容,如果未能解决你的问题,请参考以下文章

xcode 5.0.2 无法构建模块“Darwin”

live555 RTSP推送到Darwin出现404错误的解决

深入NodeJS模块os - 与操作系统“打交道”

[NodeJS]常用模块简单讲解

用Darwin Streaming Server搭建rtsp流媒体服务器

用Darwin Streaming Server搭建rtsp流媒体服务器