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

问题描述 投票:4回答:3
os.platform();

上面的JS指令返回OS的名称。

  • 当它在Ubuntu上运行时,它返回 'linux'
  • 当它在Macbook上运行时,它返回 'darwin'

我想知道为什么不返回osxunixbsd ..?

darwinis是osx的一个分支吗?

如何使用Node.js获取MAC下的OS类型?

node.js macos operating-system darwin
3个回答
8
投票

达尔文不是OSX,OSX是达尔文。

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

因此,虽然你可以100%确定任何Apple产品(macOS,OSX,iOS,watchOS,tvOS)将返回Darwin,但从技术角度来看,假设darwin只会出现操作系统,这是不正确的,因为一些低调的开源项目存在,像PureDarwin,并且thoses也将返回darwin

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


4
投票

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;
}

注意:从OS X 10.8开始,上面显示的Gestalt()用法已被弃用,但它的替换似乎在OS X 10.10之前无法使用,因此您可能需要使用Objective-C([processInfo operatingSystemVersion])并在API可用性上进行分支,如here所做的那样在Chromium。


1
投票

达尔文是苹果给OS X的原始名称。之所以如此,是因为它是操作系统发展中的NeXT步骤。

© www.soinside.com 2019 - 2024. All rights reserved.