node-sass 埋坑記錄


node-sass 埋坑記錄

背景

原有項目、環境:

node:v8.16.2

npm:v6.4.1

node-sass::v4.8.0

Angular-CLI:v6.x

本機沒有安裝 Visual Studio

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

后來,接手的新項目中:

Angular-CLI:v8.x

由於升級了 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 包直接拷貝到辦公機子上面使用了。

參考鏈接

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM