Home>Article>Web Front-end> A brief analysis of how to obtain the mac system version using node

A brief analysis of how to obtain the mac system version using node

青灯夜游
青灯夜游 forward
2022-05-04 10:00:17 3077browse

How to get the mac system version usingnode? The following article will introduce to you how to use node to elegantly obtain the mac system version. I hope it will be helpful to you!

A brief analysis of how to obtain the mac system version using node

#Today I suddenly encountered a compatibility requirement, which requires different compatibility processing according to different macOS versions.

Unexpectedly, the seemingly simple requirement also went through some twists and turns, but fortunately the problem was solved in the end.

Record the process of solving the problem here for the reference of other students with similar needs.

Get the system type

Since compatibility needs to be processed for the mac system, you first need to distinguish the system type. Fortunately,nodejsprovides relevant API, just useos.platform()to get the system type directly.

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

It is worth mentioning that the corresponding name of macOS is notmacOSbutdarwin.

In addition to obtaining the system type through theospackage, we can also obtain it throughprocess.platform.

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

Get the system version

Many students who are familiar with node will say at this time that you can quickly obtain the system version throughos.release(). However, when you executeos.release(), you will find that its results are not consistent with conventional understanding.

For example, my system version is12.0.1, but the execution result ofos.release()is21.1.0.

Viewnode official documentationIt can be found that node determines the operating system throughuname(3), so the execution result is contrary to conventional wisdom.

Get the system version through the command line

Since the system version obtained byos.release()is difficult to understand, is there anything Can the solution directly obtain the actual system version number?

Thesw_verscommand exists on mac, which can directly obtain system information.

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

You can see that thesw_verscommand directly obtains the system version:12.0.1.

If no other system information is needed, we can directly obtain the system version by adding command line parameters, filtering the command line results.

$ sw_vers -ProductVersion 12.0.1

Since the command line is not case-sensitive, the command line parameters do not matter case. You can also write-productversionor-ProductVersion.

Now that we know how to write the command line, we only need to call the command line in node.

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

Elegantly obtain the system version

You can obtain the correct system version by executing the command line command through the node sub-process. However, this method has performance flaws. It requires creating a sub-process to execute the command line. Compared with theos.release()method, it is more expensive.

The problem with usingos.release()before is that the returned result is contrary to conventional wisdom, but its result is actually correct, but it requires a mapping.

So, the system version can be obtained elegantly throughos.release()and the mapping table.

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

In order to make it easier for Mac to still recognize the newly released system, the new system version name is recognized asUnknow, and the new version is recognized as an empty string.

This is to learn the mobile model scoring platform. If the version is empty, the default is the higher version, which does not affect the compatibility processing of lower versions.

Now, we can get the system version elegantly through node.

For more node-related knowledge, please visit:nodejs tutorial!

The above is the detailed content of A brief analysis of how to obtain the mac system version using node. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:juejin.cn. If there is any infringement, please contact admin@php.cn delete