站長資訊網
        最全最豐富的資訊網站

        淺析利用node怎么獲取mac系統版本

        利用node怎么獲取mac系統版本?下面本篇文章給大家介紹一下利用node優雅地獲取 mac 系統版本的方法,希望對大家有所幫助!

        淺析利用node怎么獲取mac系統版本

        今天突然碰到了一個兼容性需求,需要根據不同 macOS 版本,進行不同的兼容性處理。

        沒想到看似簡單的需求,中間也經歷了一番波折,好在最后解決了問題。

        在此記錄一下解決問題的過程,也方便其他有類似需求的同學參考。

        獲取系統類型

        既然需要針對 mac 系統進行兼容性處理,首先需要區分系統類型,好在 nodejs 提供了相關的 API,只需使用 os.platform() 即可直接獲取系統類型。

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

        值得一提的是,macOS 對應的名稱不是 macOS 而是 darwin

        除了可以通過 os 這個包獲取系統類型,我們還可以通過 process.platform 來獲取。

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

        獲取系統版本

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

        優雅地獲取系統版本

        通過 node 子進程執行命令行命令,可以獲取正確的系統版本。但是這種方式有著性能方面的缺陷,需要創建子進程執行命令行,相對于 os.release() 的方式,開銷較大。

        之前使用 os.release() 的問題在于返回結果比較違反常規認知,但是它的結果其實是正確的,只不過需要進行一次映射。

        所以,通過 os.release() 配合映射表即可優雅地獲取系統版本。

        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

        為了方便 mac 新發布系統后依然能夠識別,將新系統版本名稱識別為 Unknow,新版本識別為空字符串。

        此舉是學習移動端機型打分平臺,如果出現版本為空時,默認為高版本,不影響低版本的兼容性處理。

        現在,我們就能夠通過 node 優雅地獲取系統版本啦。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产成人精品久久一区二区三区av| 91精品福利在线观看| 国产精品麻豆高清在线观看| 亚洲综合欧美精品一区二区| 国产精品va在线观看无码| 精品国产乱码一区二区三区| 午夜一级日韩精品制服诱惑我们这边| 日本精品在线视频| 国产精品免费福利久久| 天天爽夜夜爽8888视频精品| 国产精品理论片在线观看| 99久久精品国内| 精品人人妻人人澡人人爽人人| 日本五区在线不卡精品| 国产成人精品cao在线| 国产在线精品网址你懂的| 国产亚洲精品精华液| 日韩精品亚洲人成在线观看| 香港三级精品三级在线专区| 国产精品哟女在线观看| 99国产精品国产免费观看| 999精品在线| 99精品久久精品| 99精品国产自在现线观看| 成人午夜视频精品一区| 国产成人精品无码片区在线观看| 欧美日韩人妻精品一区二区在线| 最新精品露脸国产在线 | 亚洲精品无码久久毛片| 日韩福利视频精品专区| 日批日出水久久亚洲精品tv| 下载天堂国产AV成人无码精品网站| 日韩精品一区二区三区影院| 青青青青久久精品国产h久久精品五福影院1421 | 精品久久一区二区三区| 视频二区国产精品职场同事| 在线观看日韩精品| 国产精品成人99久久久久| 国产AⅤ精品一区二区三区久久| 国产精品第一区第27页| 国产香蕉国产精品偷在线观看|