今天在維護一個基於 vue-cli 創建的舊項目,在安裝依賴時會報錯,具體信息如下:
gyp ERR! stack Error: spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe ENOENT
於是我順着這個路徑 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe
看到底有沒有這個目錄,結果到了只匹配到了 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\
, 15.0
后面的路徑沒有匹配,但是同級目錄有個 Current
子目錄 ,然后順着他能找到 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe
。此時我靈機一動,如果把 Current
目錄名稱改成 15.0
不就可以了,於是改完后,重新安裝一下, 結果還是報了是其他的編譯錯誤信息。
然后,上網查了一下,有人說是 node-sass@4.x
的問題,它只能使用 vs2017
來編譯,而不能使用 vs2019
,但是如果安裝 node-sass@5.x
就不會有這個問題,所以我就試試安裝 node-sass@5.x
。安裝確實好順利,沒有任何問題,可是在啟動項目的時候,sass-loader
卻報錯了:
Error: Node Sass version 5.0.0 is incompatible with ^4.0.0.
這是 vue
的 sass-loader
報的錯,不兼容 node-sass5.0.0
。所以升級 node-sass 的方式也是行不通。
這時候,只能想辦法安裝一個 vs2017 了,但是我平時在搞 UE4 用的是 vs2019,不想卸掉重新安裝舊版的。幸好 ,visual studio install 里面可以同時安裝多個不同版本的 vs,所以我裝了 vs2017 后,再設置一下 npm 的 msvs_version 變量:
npm config set msvs_version 2017
然后,再安裝 node-sass@4.x 就成功了。問題至此已解決。
另外,目前 sass 官網已經廢棄了 node-sass 了,而是推薦使用 dart sass ,所以也可以改成一下 sass-loader 的配置,這樣就不需要安裝 node-sass ,就不會出現編譯錯誤了。至於怎么修改配置,這里也不展開介紹,有興趣的可以自行查找一下。