node-sass 埋坑記錄

node-sass 埋坑記錄

背景

原有項目、環境:node

node:v8.16.2python

npm:v6.4.1c++

node-sass::v4.8.0git

Angular-CLI:v6.xgithub

本機沒有安裝 Visual Studiosql

以上是涉及到的工具的版本,可正常使用,項目運行良好。npm

後來,接手的新項目中:json

Angular-CLI:v8.xwindows

因爲升級了 Angular 版本,一樣也升級了 Angular-CLI 版本,致使 v8.x 版本的 node 已經沒法編譯 angular 項目,至少須要使用 node v10.x 版本。瀏覽器

無奈,升級了 node 版本,隨之而來的就是 node-sass v4.8.0 版本沒法使用,又致使構建失敗,因此又得安裝新版本 node-sass。

但 node-sass 新版本安裝過程卻又報找不到 Python 環境錯誤,致使 install 失敗。

好不容易在本地安裝了 Python 環境,又報了個 MSB4132:沒法識別工具版本 2.0 的錯誤。

在網上查了半天,跟着改,卻又出現新錯誤 MSB4019:Microsoft.Cpp.Default.props 找不到的錯誤。

找了下,發現是由於本機沒有 VS C++ 的編輯工具,能夠藉助:

npm install -g --production windows.build.tools

來下載安裝,試了下,發現是須要聯網才行,辦公網絡沒外網。

官網看了半天,找到了下載離線安裝包方式、結果倒是 2019 版本,太新,項目仍舊報錯。

(what the fuck!

相關異常

  • error MSB4019
gyp info spawn xxx
error MSB4019:未找到導入的項目 "E:\Microsoft.Cpp.Default.props"。請確認 <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: 沒法識別工具版本「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

分析

歸根結底,就是由於辦公網絡被限制訪問外網致使。

畢竟升級了 angular 大版本,隨之而來的一些依賴庫也須要跟着升級,這無可厚非,能夠理解,因此當讓我也升級 node-sass 時,我沒啥反感。

但誰知道,node-sass 新版的下載須要依賴 C++ 的編譯環境、須要依賴 python 環境,雖然到這裏有點煩了,但還好,網上也不少人出現這問題,解決方案不難,以下:

npm install --global --production windows-build-tools

windows-build-tools 的介紹能夠看看官方網站:

https://www.npmjs.com/package/windows-build-tools

這條命令,其實就是會自動去聯網下載 Visual C++ Build Tools 和安裝 Python 2.7 環境,一鍵式命令。

但,個人辦公網絡沒法訪問外網啊!

雖然有內網的 Npm 倉庫,但也只下載了 windows-build-tools 這個包,這包裏是一堆去訪問外網下載東西的腳本啊,對我來講,這解決方案沒用啊!

無奈下,只能本身安裝,Python 還好,網上搜一下,安裝 + 配置環境變量便可。

問題就在於 Visual C++ Build Tools,這個 Mircosoft 的東西,要搞離線安裝,是真的麻煩。

這裏有官方的教程(雖然沒怎麼看懂),以及網上大佬的教程,連接都貼出來,我這裏就大概講講,感興趣,自行查閱:

小結

之因此之前正常,新項目出現種種問題,緣由在於各環境的版本升級,因此,須要明確,各個環境、框架之間都是有依賴關係的,不是任意版本組合就能夠的,好比:

angular v8 版本就須要依賴 angular-cli 到 v8.x 版本;

angular-cli v8.x 版本就須要依賴 node 到 v10.x 版本;

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

因此,當須要升級 angular 版本時,請注意這些事項,具體的依賴關係,請到各自的官網中查看說明。

解決方案

能聯網

  1. 先升級 angular 版本,再升級 angular-cli 版本
  2. 構建失敗時,會提示請升級 node 版本,按提示升級,可經過 nvm 或手動下載新版本 node
  3. 繼續構建時,node-sass 下載失敗
    1. 請先確認是不是鏡像問題,能夠手動在瀏覽器地址欄輸入 node-sass 下載的地址(可在 package.json.lock 中查看),看是否可以找到對應版本的 node-sass
    2. 出現文章開頭說過的幾種 node-sass 編譯錯誤時,注意日誌,根據不一樣錯誤,搜索相關關鍵詞,按網上教程解決,一般來講就是沒有 python 環境、沒有 c++ 編譯工具、vs 版本太高等問題,能夠試試經過 npm 安裝 windows-build-tools 來自動下載安裝這些工具試試

建議多去相關庫的 github 的 issue 裏找找,一般都能找到你遇到的問題

不能聯網

辦公網絡一般沒法訪問外網,但都會有本身內部的鏡像倉庫,因此下載基本的 node 之類的庫是沒有問題的,上面的解決步驟也同樣能夠參考執行。

不能訪問外網最重要的一點就是,windows 的東西無法下載,好比上面的 windows-build-tools 自動去下載 vs c++ 的編譯工具就下載不了。

這時候,若是須要,那就只能在能訪問外網的機子上,將 vs studio 相關東西先下載下來,再用離線方式進行安裝。

其實,我最後即便離線安裝了 vs studio 2019 的版本以後,node-sass 仍舊仍是下載失敗,最後,實在沒時間去研究了,乾脆在能訪問外網的機子上面,也安裝同版本的 node,而後成功下載好 node-sass 以後,將這個 node-sass 包直接拷貝到辦公機子上面使用了。

參考連接

如下是不少不少的連接,有的有提出解決方案,有的沒有,自取:

相關文章
相關標籤/搜索