Home>Article>Web Front-end> A brief analysis of how to obtain the mac system version using node
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!
#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.
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 notmacOS
butdarwin
.
In addition to obtaining the system type through theospackage, we can also obtain it throughprocess.platform
.
import { platform } from 'process'; console.log(platform); // 'darwin'
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.
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_vers
command exists on mac, which can directly obtain system information.
$ sw_vers ProductName: macOS ProductVersion: 12.0.1 BuildVersion: 21A559
You can see that thesw_vers
command 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-productversion
or-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
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!