node-sass 埋坑記錄

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)看了半天,找到了下載離線(xiàn)安裝包方式、結(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> 聲明中的路徑正確,且磁盤(pán)上存在該文件

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”。可用的工具版本為 "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ò)被限制訪(fǎng)問(wèn)外網(wǎng)導(dǎo)致。

畢竟升級(jí)了 angular 大版本,隨之而來(lái)的一些依賴(lài)庫(kù)也需要跟著升級(jí),這無(wú)可厚非,可以理解,所以當(dāng)讓我也升級(jí) node-sass 時(shí),我沒(méi)啥反感。

但誰(shuí)知道,node-sass 新版的下載需要依賴(lài) C++ 的編譯環(huán)境、需要依賴(lài) 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ú)法訪(fǎng)問(wèn)外網(wǎng)啊!

雖然有內(nèi)網(wǎng)的 Npm 倉(cāng)庫(kù),但也只下載了 windows-build-tools 這個(gè)包,這包里是一堆去訪(fǎng)問(wèn)外網(wǎng)下載東西的腳本啊,對(duì)我來(lái)說(shuō),這解決方案沒(méi)用啊!

無(wú)奈下,只能自己安裝,Python 還好,網(wǎng)上搜一下,安裝 + 配置環(huán)境變量即可。

問(wèn)題就在于 Visual C++ Build Tools,這個(gè) Mircosoft 的東西,要搞離線(xiàn)安裝,是真的麻煩。

這里有官方的教程(雖然沒(méi)怎么看懂),以及網(wǎng)上大佬的教程,鏈接都貼出來(lái),我這里就大概講講,感興趣,自行查閱:

小結(jié)

之所以以前正常,新項(xiàng)目出現(xiàn)種種問(wèn)題,原因在于各環(huán)境的版本升級(jí),所以,需要明確,各個(gè)環(huán)境、框架之間都是有依賴(lài)關(guān)系的,不是任意版本組合就可以的,比如:

angular v8 版本就需要依賴(lài) angular-cli 到 v8.x 版本;

angular-cli v8.x 版本就需要依賴(lài) node 到 v10.x 版本;

node-sass v4.8 只支持到 node v9 版本;

所以,當(dāng)需要升級(jí) angular 版本時(shí),請(qǐng)注意這些事項(xiàng),具體的依賴(lài)關(guān)系,請(qǐng)到各自的官網(wǎng)中查看說(shuō)明。

解決方案

能聯(lián)網(wǎng)

  1. 先升級(jí) angular 版本,再升級(jí) angular-cli 版本
  2. 構(gòu)建失敗時(shí),會(huì)提示請(qǐng)升級(jí) node 版本,按提示升級(jí),可通過(guò) nvm 或手動(dòng)下載新版本 node
  3. 繼續(xù)構(gòu)建時(shí),node-sass 下載失敗
    1. 請(qǐng)先確認(rèn)是否是鏡像問(wèn)題,可以手動(dòng)在瀏覽器地址欄輸入 node-sass 下載的地址(可在 package.json.lock 中查看),看是否能夠找到對(duì)應(yīng)版本的 node-sass
    2. 出現(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ú)法訪(fǎng)問(wèn)外網(wǎng),但都會(huì)有自己內(nèi)部的鏡像倉(cāng)庫(kù),所以下載基本的 node 之類(lèi)的庫(kù)是沒(méi)有問(wèn)題的,上面的解決步驟也一樣可以參考執(zhí)行。

不能訪(fǎng)問(wèn)外網(wǎng)最重要的一點(diǎn)就是,windows 的東西沒(méi)法下載,比如上面的 windows-build-tools 自動(dòng)去下載 vs c++ 的編譯工具就下載不了。

這時(shí)候,如果需要,那就只能在能訪(fǎng)問(wèn)外網(wǎng)的機(jī)子上,將 vs studio 相關(guān)東西先下載下來(lái),再用離線(xiàn)方式進(jìn)行安裝。

其實(shí),我最后即使離線(xiàn)安裝了 vs studio 2019 的版本之后,node-sass 仍舊還是下載失敗,最后,實(shí)在沒(méi)時(shí)間去研究了,干脆在能訪(fǎng)問(wèn)外網(wǎng)的機(jī)子上面,也安裝同版本的 node,然后成功下載好 node-sass 之后,將這個(gè) node-sass 包直接拷貝到辦公機(jī)子上面使用了。

參考鏈接

以下是很多很多的鏈接,有的有提出解決方案,有的沒(méi)有,自取:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,606評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,044評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,826評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,227評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,447評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,807評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,001評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評(píng)論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,243評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,667評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,930評(píng)論 1 287
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,709評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,996評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容