node を使用して Mac システムのバージョンを取得するにはどうすればよいですか?次の記事では、nodeを使ってMacのシステムバージョンを効率的に取得する方法を紹介しますので、お役に立てれば幸いです。
#今日、突然互換性要件に遭遇しました。これは、macOS のバージョンごとに異なる互換性処理が必要です。
意外なことに、一見単純な要件にも紆余曲折がありましたが、幸いなことに最終的には問題は解決されました。
同じようなニーズを持つ他の学生の参考のために、問題を解決するプロセスをここに記録します。
Mac システムでは互換性を処理する必要があるため、まずシステム タイプを区別する必要があります。 # 関連する API を提供します。システム タイプを直接取得するには、os.platform() を使用するだけです。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">import { platform } from &#39;os&#39;;
console.log(platform()); // &#39;darwin&#39;</pre><div class="contentsignin">ログイン後にコピー</div></div>
対応する macOS の名前は
ではなく darwin
であることに注意してください。
システム タイプは、
パッケージを通じて取得するだけでなく、process.platform を通じて取得することもできます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">import { platform } from &#39;process&#39;;
console.log(platform); // &#39;darwin&#39;</pre><div class="contentsignin">ログイン後にコピー</div></div>
。ただし、os.release()
を実行すると、その結果が従来の理解と一致していないことがわかります。 たとえば、システムのバージョンは
ですが、 os.release()
の実行結果は 21.1.0
です。 View
node は uname(3) を通じてオペレーティング システムを決定しているため、実行結果は従来の常識に反していることがわかります。
コマンドラインでシステムバージョンを取得するで取得するシステムバージョンはわかりにくいので、ソリューションは実際のシステムのバージョン番号を直接取得できますか? mac には、システム情報を直接取得できる
コマンドが存在します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">$ sw_vers
ProductName: macOS
ProductVersion: 12.0.1
BuildVersion: 21A559</pre><div class="contentsignin">ログイン後にコピー</div></div>
コマンドがシステム バージョン 12.0.1
を直接取得していることがわかります。 他のシステム情報が必要ない場合は、コマンド ライン パラメータを追加し、コマンド ラインの結果をフィルタリングすることで、システム バージョンを直接取得できます。
$ sw_vers -ProductVersion 12.0.1
コマンド ラインでは大文字と小文字が区別されないため、コマンド ライン パラメータの大文字と小文字は関係ありません。
-productversion または -ProductVersion
と記述することもできます。 コマンドラインの書き方がわかったので、あとはノードでコマンドラインを呼び出すだけです。
import { execSync } from 'child_process'; console.log(execSync('sw_vers -ProductVersion', { encoding: 'utf-8' })); // 12.0.1
メソッドと比較してコストが高くなります。 以前の
の使用に関する問題は、返される結果が従来の常識に反していて、実際には正しい結果ですが、マッピングが必要であることです。 したがって、システム バージョンは、
とマッピング テーブルを通じてエレガントに取得できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">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</pre><div class="contentsignin">ログイン後にコピー</div></div>
Mac が新しくリリースされたシステムを認識しやすくするために、新しいシステムのバージョン名は
として認識され、新しいバージョンは空の文字列として認識されます。 これはモバイル モデル スコアリング プラットフォームを学習するためのものです。バージョンが空の場合、デフォルトは上位バージョンとなり、下位バージョンの互換性処理には影響しません。
これで、ノードを介してシステムのバージョンをエレガントに取得できるようになりました。
ノード関連の知識の詳細については、
nodejs チュートリアル以上がノードを使用して Mac システムのバージョンを取得する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。