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)看了半天疑故,找到了下載離線安裝包方式、結(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)

  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ú)法訪問(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)有典徊,自群技濉:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市儡毕,隨后出現(xiàn)的幾起案子也切,更是在濱河造成了極大的恐慌,老刑警劉巖腰湾,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雷恃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡费坊,警方通過(guò)查閱死者的電腦和手機(jī)倒槐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葵萎,“玉大人导犹,你說(shuō)我怎么就攤上這事唱凯∠弁” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵磕昼,是天一觀的道長(zhǎng)卷雕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)票从,這世上最難降的妖魔是什么漫雕? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任滨嘱,我火速辦了婚禮,結(jié)果婚禮上浸间,老公的妹妹穿的比我還像新娘太雨。我一直安慰自己,他們只是感情好魁蒜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布囊扳。 她就那樣靜靜地躺著,像睡著了一般兜看。 火紅的嫁衣襯著肌膚如雪锥咸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天细移,我揣著相機(jī)與錄音搏予,去河邊找鬼。 笑死弧轧,一個(gè)胖子當(dāng)著我的面吹牛雪侥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播劣针,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼校镐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捺典?” 一聲冷哼從身側(cè)響起鸟廓,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎襟己,沒(méi)想到半個(gè)月后引谜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擎浴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年员咽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贮预。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贝室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仿吞,到底是詐尸還是另有隱情滑频,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布唤冈,位于F島的核電站峡迷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绘搞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一彤避、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夯辖,春花似錦琉预、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至贮缅,卻和暖如春榨咐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谴供。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工块茁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桂肌。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓数焊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親崎场。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佩耳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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