Maison  >  Article  >  interface Web  >  Une brève analyse de la façon d'obtenir la version du système Mac à l'aide de Node

Une brève analyse de la façon d'obtenir la version du système Mac à l'aide de Node

青灯夜游
青灯夜游avant
2022-05-04 10:00:173085parcourir

Comment obtenir la version du système Mac en utilisant node ? L'article suivant vous présentera comment utiliser node pour obtenir avec élégance la version du système Mac. J'espère qu'il vous sera utile !

Une brève analyse de la façon d'obtenir la version du système Mac à l'aide de Node

J'ai soudainement rencontré une exigence de compatibilité aujourd'hui, qui nécessite un traitement de compatibilité différent selon les différentes versions de macOS.

De manière inattendue, cette exigence apparemment simple a également connu quelques rebondissements, mais heureusement, le problème a finalement été résolu.

Enregistrez le processus de résolution du problème ici pour référence d'autres étudiants ayant des besoins similaires.

Obtenez le type de système

Étant donné que la compatibilité doit être traitée pour le système Mac, vous devez d'abord distinguer le type de système Heureusement, nodejs fournit des API pertinentes, utilisez simplement os.platform()<.> Vous pouvez obtenir directement le type de système. <code>os.platform() 即可直接获取系统类型。

import { platform } from &#39;os&#39;;

console.log(platform()); // &#39;darwin&#39;

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

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

import { platform } from &#39;process&#39;;

console.log(platform); // &#39;darwin&#39;

获取系统版本

很多熟悉 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 &#39;child_process&#39;;
console.log(execSync(&#39;sw_vers -ProductVersion&#39;, { encoding: &#39;utf-8&#39; })); // 12.0.1

优雅地获取系统版本

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

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

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

import os from &#39;os&#39;;

const macVersionMap = new Map([
  [21, [&#39;Monterey&#39;, &#39;12&#39;]],
  [20, [&#39;Big Sur&#39;, &#39;11&#39;]],
  [19, [&#39;Catalina&#39;, &#39;10.15&#39;]],
  [18, [&#39;Mojave&#39;, &#39;10.14&#39;]],
  [17, [&#39;High Sierra&#39;, &#39;10.13&#39;]],
  [16, [&#39;Sierra&#39;, &#39;10.12&#39;]],
  [15, [&#39;El Capitan&#39;, &#39;10.11&#39;]],
  [14, [&#39;Yosemite&#39;, &#39;10.10&#39;]],
  [13, [&#39;Mavericks&#39;, &#39;10.9&#39;]],
  [12, [&#39;Mountain Lion&#39;, &#39;10.8&#39;]],
  [11, [&#39;Lion&#39;, &#39;10.7&#39;]],
  [10, [&#39;Snow Leopard&#39;, &#39;10.6&#39;]],
  [9, [&#39;Leopard&#39;, &#39;10.5&#39;]],
  [8, [&#39;Tiger&#39;, &#39;10.4&#39;]],
  [7, [&#39;Panther&#39;, &#39;10.3&#39;]],
  [6, [&#39;Jaguar&#39;, &#39;10.2&#39;]],
  [5, [&#39;Puma&#39;, &#39;10.1&#39;]],
]);

const getMacRelease = (release: string) => {
  const macRelease = release ?? os.release();
  const firstReleaseVersion = Number(macRelease.split(&#39;.&#39;)[0]);
  const [name, version] = macVersionMap.get(firstReleaseVersion) || [
    &#39;Unknown&#39;,
    &#39;&#39;,
  ];

  return {
    name,
    version,
  };
};

console.log(getMacRelease()) // 12

为了方便 mac 新发布系统后依然能够识别,将新系统版本名称识别为 Unknowrrreee

Il convient de mentionner que le nom correspondant de macOS n'est pas macOS mais

darwin

.

En plus d'obtenir le type de système via le package os

, nous pouvons également obtenir le type de système via process.platform pour obtenir. rrreee

Obtenir la version du système

🎜🎜De nombreux étudiants familiers avec Node diront à ce stade que vous pouvez obtenir rapidement la version du système via os.release( ) . Cependant, lorsque vous exécutez os.release(), vous constaterez que ses résultats ne sont pas conformes aux idées reçues. 🎜🎜Par exemple, la version de mon système est 12.0.1, mais le résultat de l'exécution de os.release() est 21.1.0. 🎜🎜Voir le document officiel du nœud🎜Vous pouvez constater que ce nœud est passé par uname(3)🎜 pour déterminer le système d'exploitation, donc le résultat de l'exécution est contrairement à la reconnaissance conventionnelle. 🎜

🎜Obtenez la version du système via la ligne de commande🎜🎜🎜Étant donné que la version du système obtenue par os.release() est difficile à comprendre, y a-t-il n'importe quoi La solution peut-elle obtenir directement le numéro de version réel du système ? 🎜🎜La commande sw_vers existe sur mac, qui permet d'obtenir directement les informations système. 🎜rrreee🎜Vous pouvez voir que la commande sw_vers obtient directement la version du système : 12.0.1. 🎜🎜Si aucune autre information système n'est nécessaire, nous pouvons obtenir directement la version du système en ajoutant des paramètres de ligne de commande et en filtrant les résultats de la ligne de commande. 🎜rrreee🎜Étant donné que la ligne de commande n'est pas sensible à la casse, les paramètres de la ligne de commande n'ont pas d'importance. Vous pouvez également écrire -productversion ou -ProductVersion. 🎜🎜Maintenant que nous savons comment écrire la ligne de commande, il nous suffit d'appeler la ligne de commande dans node. 🎜rrreee

🎜Obtenez la version du système avec élégance🎜🎜🎜Exécutez la commande de ligne de commande via le sous-processus du nœud pour obtenir la version correcte du système. Cependant, cette méthode présente des défauts de performances. Elle nécessite la création d'un sous-processus pour exécuter la ligne de commande. Par rapport à la méthode os.release(), elle est plus coûteuse. 🎜🎜Le problème avec l'utilisation de os.release() avant est que le résultat renvoyé est contraire aux idées reçues, mais son résultat est en fait correct, mais il nécessite un mappage. 🎜🎜Ainsi, la version du système peut être obtenue avec élégance via os.release() et la table de mappage. 🎜rrreee🎜Afin de permettre à Mac de reconnaître plus facilement le système nouvellement publié, le nom de la nouvelle version du système est reconnu comme Inconnu et la nouvelle version est reconnue comme une chaîne vide. 🎜🎜Il s'agit d'apprendre la plateforme de notation des modèles mobiles. Si la version est vide, elle sera par défaut la version supérieure et n'affectera pas le traitement de compatibilité des versions inférieures. 🎜🎜Maintenant, nous pouvons obtenir la version du système avec élégance via node. 🎜🎜Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer