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:173082browse

How to get the mac system version using node? 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, nodejs provides relevant API, just use os.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 not macOS but darwin.

In addition to obtaining the system type through the os package, we can also obtain it through process.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 through os.release() . However, when you execute os.release(), you will find that its results are not consistent with conventional understanding.

For example, my system version is 12.0.1, but the execution result of os.release() is 21.1.0 .

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

Get the system version through the command line

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

The sw_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 the sw_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

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 the os.release() method, it is more expensive.

The problem with using os.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 through os.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 as Unknow, 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