node-sass 埋坑記錄
背景
原有項(xiàng)目、環(huán)境:
node:v8.16.2
npm:v6.4.1
node-sass::v4.8.0
Angular-CLI:v6.x
本機(jī)沒(méi)有安裝 Visual Studio
以上是涉及到的工具的版本,可正常使用厦章,項(xiàng)目運(yùn)行良好镇匀。
后來(lái),接手的新項(xiàng)目中:
Angular-CLI:v8.x
由于升級(jí)了 Angular 版本闷袒,同樣也升級(jí)了 Angular-CLI 版本坑律,導(dǎo)致 v8.x 版本的 node 已經(jīng)無(wú)法編譯 angular 項(xiàng)目,至少需要使用 node v10.x 版本囊骤。
無(wú)奈晃择,升級(jí)了 node 版本,隨之而來(lái)的就是 node-sass v4.8.0 版本無(wú)法使用也物,又導(dǎo)致構(gòu)建失敗宫屠,所以又得安裝新版本 node-sass。
但 node-sass 新版本安裝過(guò)程卻又報(bào)找不到 Python 環(huán)境錯(cuò)誤滑蚯,導(dǎo)致 install 失敗浪蹂。
好不容易在本地安裝了 Python 環(huán)境,又報(bào)了個(gè) MSB4132:無(wú)法識(shí)別工具版本 2.0 的錯(cuò)誤告材。
在網(wǎng)上查了半天坤次,跟著改,卻又出現(xiàn)新錯(cuò)誤 MSB4019:Microsoft.Cpp.Default.props 找不到的錯(cuò)誤斥赋。
找了下缰猴,發(fā)現(xiàn)是因?yàn)楸緳C(jī)沒(méi)有 VS C++ 的編輯工具,可以借助:
npm install -g --production windows.build.tools
來(lái)下載安裝疤剑,試了下滑绒,發(fā)現(xiàn)是需要聯(lián)網(wǎng)才行,辦公網(wǎng)絡(luò)沒(méi)外網(wǎng)隘膘。
官網(wǎng)看了半天疑故,找到了下載離線安裝包方式、結(jié)果卻是 2019 版本弯菊,太新纵势,項(xiàng)目仍舊報(bào)錯(cuò)。
(what the fuck!
相關(guān)異常
- error MSB4019
gyp info spawn xxx
error MSB4019:未找到導(dǎo)入的項(xiàng)目 "E:\Microsoft.Cpp.Default.props"管钳。請(qǐng)確認(rèn) <Import> 聲明中的路徑正確吨悍,且磁盤上存在該文件
gyp ERR! stack Error `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit code: 1
- error MSB4132
gyp verb Not using VS2017: Could not use PowerShell to find VS2017
...
gyp verb could not find "msbuild.exe" in PATH - finding location in registry
...
MSBUILD : error MSB4132: 無(wú)法識(shí)別工具版本“2.0”√G叮可用的工具版本為 "4.0"育瓜。
- python not found
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
- a bug in node-gyp
gyp ERR! This is a bug in `node-gyp`.
gyp ERR! Try to update node-gyp and file an Issue if it does not help
分析
歸根結(jié)底,就是因?yàn)檗k公網(wǎng)絡(luò)被限制訪問(wèn)外網(wǎng)導(dǎo)致栽烂。
畢竟升級(jí)了 angular 大版本躏仇,隨之而來(lái)的一些依賴庫(kù)也需要跟著升級(jí)恋脚,這無(wú)可厚非,可以理解焰手,所以當(dāng)讓我也升級(jí) node-sass 時(shí)糟描,我沒(méi)啥反感。
但誰(shuí)知道书妻,node-sass 新版的下載需要依賴 C++ 的編譯環(huán)境船响、需要依賴 python 環(huán)境,雖然到這里有點(diǎn)煩了躲履,但還好见间,網(wǎng)上也很多人出現(xiàn)這問(wèn)題,解決方案不難工猜,如下:
npm install --global --production windows-build-tools
windows-build-tools 的介紹可以看看官方網(wǎng)站:
https://www.npmjs.com/package/windows-build-tools
這條命令米诉,其實(shí)就是會(huì)自動(dòng)去聯(lián)網(wǎng)下載 Visual C++ Build Tools 和安裝 Python 2.7 環(huán)境,一鍵式命令篷帅。
但史侣,我的辦公網(wǎng)絡(luò)無(wú)法訪問(wèn)外網(wǎng)啊魏身!
雖然有內(nèi)網(wǎng)的 Npm 倉(cāng)庫(kù)惊橱,但也只下載了 windows-build-tools 這個(gè)包,這包里是一堆去訪問(wèn)外網(wǎng)下載東西的腳本啊箭昵,對(duì)我來(lái)說(shuō)税朴,這解決方案沒(méi)用啊宙枷!
無(wú)奈下,只能自己安裝茧跋,Python 還好慰丛,網(wǎng)上搜一下,安裝 + 配置環(huán)境變量即可瘾杭。
問(wèn)題就在于 Visual C++ Build Tools诅病,這個(gè) Mircosoft 的東西,要搞離線安裝粥烁,是真的麻煩贤笆。
這里有官方的教程(雖然沒(méi)怎么看懂),以及網(wǎng)上大佬的教程讨阻,鏈接都貼出來(lái)芥永,我這里就大概講講,感興趣钝吮,自行查閱:
小結(jié)
之所以以前正常埋涧,新項(xiàng)目出現(xiàn)種種問(wèn)題板辽,原因在于各環(huán)境的版本升級(jí),所以棘催,需要明確劲弦,各個(gè)環(huán)境、框架之間都是有依賴關(guān)系的醇坝,不是任意版本組合就可以的邑跪,比如:
angular v8 版本就需要依賴 angular-cli 到 v8.x 版本;
angular-cli v8.x 版本就需要依賴 node 到 v10.x 版本呼猪;
node-sass v4.8 只支持到 node v9 版本画畅;
所以,當(dāng)需要升級(jí) angular 版本時(shí)郑叠,請(qǐng)注意這些事項(xiàng)夜赵,具體的依賴關(guān)系,請(qǐng)到各自的官網(wǎng)中查看說(shuō)明乡革。
解決方案
能聯(lián)網(wǎng)
- 先升級(jí) angular 版本寇僧,再升級(jí) angular-cli 版本
- 構(gòu)建失敗時(shí),會(huì)提示請(qǐng)升級(jí) node 版本沸版,按提示升級(jí)嘁傀,可通過(guò) nvm 或手動(dòng)下載新版本 node
- 繼續(xù)構(gòu)建時(shí),node-sass 下載失敗
- 請(qǐng)先確認(rèn)是否是鏡像問(wèn)題视粮,可以手動(dòng)在瀏覽器地址欄輸入 node-sass 下載的地址(可在 package.json.lock 中查看)细办,看是否能夠找到對(duì)應(yīng)版本的 node-sass
- 出現(xiàn)文章開(kāi)頭說(shuō)過(guò)的幾種 node-sass 編譯錯(cuò)誤時(shí),注意日志蕾殴,根據(jù)不同錯(cuò)誤笑撞,搜索相關(guān)關(guān)鍵詞,按網(wǎng)上教程解決钓觉,通常來(lái)說(shuō)就是沒(méi)有 python 環(huán)境茴肥、沒(méi)有 c++ 編譯工具、vs 版本過(guò)高等問(wèn)題荡灾,可以試試通過(guò) npm 安裝 windows-build-tools 來(lái)自動(dòng)下載安裝這些工具試試
建議多去相關(guān)庫(kù)的 github 的 issue 里找找瓤狐,通常都能找到你遇到的問(wèn)題
不能聯(lián)網(wǎng)
辦公網(wǎng)絡(luò)通常無(wú)法訪問(wèn)外網(wǎng),但都會(huì)有自己內(nèi)部的鏡像倉(cāng)庫(kù)批幌,所以下載基本的 node 之類的庫(kù)是沒(méi)有問(wèn)題的础锐,上面的解決步驟也一樣可以參考執(zhí)行。
不能訪問(wèn)外網(wǎng)最重要的一點(diǎn)就是荧缘,windows 的東西沒(méi)法下載皆警,比如上面的 windows-build-tools 自動(dòng)去下載 vs c++ 的編譯工具就下載不了。
這時(shí)候截粗,如果需要耀怜,那就只能在能訪問(wèn)外網(wǎng)的機(jī)子上恢着,將 vs studio 相關(guān)東西先下載下來(lái),再用離線方式進(jìn)行安裝财破。
其實(shí)掰派,我最后即使離線安裝了 vs studio 2019 的版本之后,node-sass 仍舊還是下載失敗左痢,最后靡羡,實(shí)在沒(méi)時(shí)間去研究了,干脆在能訪問(wèn)外網(wǎng)的機(jī)子上面俊性,也安裝同版本的 node略步,然后成功下載好 node-sass 之后,將這個(gè) node-sass 包直接拷貝到辦公機(jī)子上面使用了定页。
參考鏈接
以下是很多很多的鏈接趟薄,有的有提出解決方案,有的沒(méi)有典徊,自群技濉: