首页IT科技macau怎么读的(聊聊 node 如何优雅地获取 mac 系统版本)

macau怎么读的(聊聊 node 如何优雅地获取 mac 系统版本)

时间2025-04-30 15:03:08分类IT科技浏览3335
导读:背景 今天突然碰到了一个兼容性需求,需要根据不同 macOS 版本,进行不同的兼容性处理。...

背景

今天突然碰到了一个兼容性需求           ,需要根据不同 macOS 版本                  ,进行不同的兼容性处理           。

没想到看似简单的需求      ,中间也经历了一番波折     ,好在最后解决了问题                  。

在此记录一下解决问题的过程                  ,也方便其他有类似需求的同学参考      。

获取系统类型

既然需要针对 mac 系统进行兼容性处理            ,首先需要区分系统类型     ,好在 node 提供了相关的 API                 ,只需使用 os.platform() 即可直接获取系统类型     。

import { platform } from os; console.log(platform()); // darwin

值得一提的是            ,macOS 对应的名称不是 macOS 而是 darwin                  。

除了可以通过 os 这个包获取系统类型,我们还可以通过 process.platform 来获取            。

import { platform } from process; console.log(platform); // darwin

获取系统版本

很多熟悉 node 的同学这时候会说了                 ,可以通过 os.release() 快速获取系统版本     。但是                  ,当你执行 os.release() ,你会发现           ,它的结果并符合常规认知                 。

比如                  ,我的系统版本是 12.0.1      ,但是           ,os.release() 的执行结果却是 21.1.0            。

查看 node 官方文档可以发现                  ,node 是通过 uname(3) 来确定操作系统的      ,所以执行结果比较违背常规认知。

通过命令行获取系统版本

既然 os.release() 获取的系统版本很难让人理解     ,那么有没有什么方案可以直接获取实际的系统版本号呢?

mac 上存在 sw_vers 命令                  ,可以直接获取系统信息                 。

$ sw_vers ProductName: macOS ProductVersion: 12.0.1 BuildVersion: 21A559

可以看到 sw_vers 命令直接获取到了系统版本:12.0.1                  。

如果不需要其他系统信息            ,我们可以通过添加命令行参数     ,过滤命令行结果                 ,直接获取系统版本。

$ sw_vers -ProductVersion 12.0.1

由于命令行不区分大小写            ,所以命令行参数无所谓大小写,你也可以写成 -productversion 或者 -ProductVersion           。

既然知道命令行怎么写                 ,接下来我们只需要在 node 中调用命令行即可                  。

import { execSync } from child_process; console.log(execSync(sw_vers -ProductVersion, { encoding: utf-8 })); // 12.0.1

优雅地获取系统版本

通过 node 子进程执行命令行命令                  ,可以获取正确的系统版本      。但是这种方式有着性能方面的缺陷,需要创建子进程执行命令行           ,相对于 os.release() 的方式                  ,开销较大           。

之前使用 os.release() 的问题在于返回结果比较违反常规认知      ,但是它的结果其实是正确的           ,只不过需要进行一次映射                  。

所以                  ,通过 os.release() 配合映射表即可优雅地获取系统版本      。

import os from os; const macVersionMap = new Map([ [21, [Monterey, 12]], [20, [Big Sur, 11]], [19, [Catalina, 10.15]], [18, [Mojave, 10.14]], [17, [High Sierra, 10.13]], [16, [Sierra, 10.12]], [15, [El Capitan, 10.11]], [14, [Yosemite, 10.10]], [13, [Mavericks, 10.9]], [12, [Mountain Lion, 10.8]], [11, [Lion, 10.7]], [10, [Snow Leopard, 10.6]], [9, [Leopard, 10.5]], [8, [Tiger, 10.4]], [7, [Panther, 10.3]], [6, [Jaguar, 10.2]], [5, [Puma, 10.1]], ]); const getMacRelease = (release: string) => { const macRelease = release ?? os.release(); const firstReleaseVersion = Number(macRelease.split(.)[0]); const [name, version] = macVersionMap.get(firstReleaseVersion) || [ Unknown, , ]; return { name, version, }; }; console.log(getMacRelease()) // 12

为了方便 mac 新发布系统后依然能够识别      ,将新系统版本名称识别为 Unknow     ,新版本识别为空字符串     。

此举是学习移动端机型打分平台                  ,如果出现版本为空时            ,默认为高版本     ,不影响低版本的兼容性处理                  。

现在                 ,我们就能够通过 node 优雅地获取系统版本啦            。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
windows进程初识(IMEKRMIG.EXE进程是什么程序 是什么文件 IMEKRMIG进程查询) win10怎么恢复声音初始设置(win11电脑怎么重置声音? win11声音恢复默认设置方法)