為什么不向前兼容?!解決npm i 安裝類庫時(shí)的 CERT_HAS_EXPIRED...

這個(gè)錯(cuò)誤大概是這樣的:
npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz failed, reason: certificate has expired
它是在我們執(zhí)行 npm i 或 npm run xxx 指令時(shí)發(fā)生的。
這個(gè)錯(cuò)誤是什么意思呢?
提示說,證書過期了或自定義證書無效,在訪問和拉取https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz類庫鏈接時(shí),網(wǎng)絡(luò)請(qǐng)求失敗。
我們將這個(gè)鏈接拷貝一下,直接放在瀏覽器里訪問,它也是不可訪問的。(在問題爆發(fā)時(shí))
這是由于淘寶倉庫源網(wǎng)站的證書過期所致。
自2017年2月27日,npm不再支持自簽名證書或過期證書。
而淘寶倉庫網(wǎng)站恰好又使用了過期的自定義證書。當(dāng)我們使用 npm i 安裝某些類庫時(shí),例如類庫地址為 https://registry.npm.taobao.org/ylru/download/ylru-1.2.1.tgz,此時(shí)npm無法驗(yàn)證來源,于是拋出了 CERT_HAS_EXPIRED 錯(cuò)誤。
怎么解決呢?
關(guān)閉 SSL 驗(yàn)證:
npm config set strict-ssl false
修改軟件源,例如將軟件源地址改回官網(wǎng):
npm config set registry https://registry.npmjs.org/
這個(gè)更改的副作用是,更新或安裝類庫時(shí)需要梯子,如果有梯子則無妨。
為什么不向前兼容呢?
不清楚,一向如此。
社區(qū)有一些規(guī)則的改變,屬于基礎(chǔ)改變,會(huì)對(duì)上面的一系列軟件建筑產(chǎn)生致命影響。
采用 HTTPS 協(xié)議,要求 SSL 驗(yàn)證,不支持自定義的非法證書或過期證書,這些改動(dòng)是由于安全需要,并非只有 npm 如此,像谷歌的瀏覽器也作了同樣樣的安全規(guī)則更改。
隨著社會(huì)的進(jìn)步,軟件的發(fā)展,以后仍然會(huì)出現(xiàn)類似的基礎(chǔ)規(guī)則改進(jìn),這些變動(dòng)會(huì)對(duì)已有的舊軟件產(chǎn)生“毀滅”性影響,后果是,你不修改代碼或配置,軟件就再也無法直接運(yùn)行。
應(yīng)對(duì)策略也簡(jiǎn)單,它不兼容我們,那就只有我們兼容它嘍。
