vue sass-loader /deep/ 報(bào)錯(cuò)fixed

vue2.x項(xiàng)目中關(guān)于/deep/ 突然不能被識(shí)別且報(bào)錯(cuò)的問(wèn)題,記錄筆記

前兩天組里實(shí)習(xí)生突然說(shuō)自己項(xiàng)目跑不起來(lái)了,報(bào)錯(cuò)信息大概類(lèi)似

Module build failed (from ./node modules/sass-loader/dist/cjs.js):
SassError: expected selector.
/deep/::-webkit-scrollbar{
^

我第一反應(yīng)是讓他自查項(xiàng)目里的sass-loadernode-sass的版本是不是變了,本地環(huán)境是否有變化
但是他說(shuō)沒(méi)變,最近也沒(méi)動(dòng)過(guò)項(xiàng)目代碼,今天突然就跑不起來(lái)了。

然后我嘗試rebuild包里的node-sass,清除緩存重新安裝依賴等等,均未生效。
再然后我把在其他同事中能正常運(yùn)行的項(xiàng)目的node_modules拷貝給他的機(jī)器上,依舊無(wú)效。
甚至在別人那能完美運(yùn)行的整個(gè)項(xiàng)目在這都跑不起來(lái)。我懷疑他全局環(huán)境出現(xiàn)了問(wèn)題...

后來(lái)我發(fā)現(xiàn)了大佬的這篇文章,跟這里遇到的問(wèn)題幾乎一模一樣。

在項(xiàng)目的根目錄運(yùn)行啟動(dòng) node ,輸入  require.resolve('sass') 
如果模塊解析成功返回了 sass 包的路徑,則說(shuō)明 `sass-loader `錯(cuò)誤地加載到了`sass`而不是 `node-sass` 。

require.resolve('sass')果然發(fā)現(xiàn)他在自己的C盤(pán)里一份全局的node_modules中的sass路徑
原因是 sass-loader 并不是解析項(xiàng)目的 package.json 而是直接在運(yùn)行時(shí)里依次嘗試加載 sass(dart-sass)、node-sass、sass-embedded(sass 同個(gè)團(tuán)隊(duì)維護(hù)擁有相同 API 的版本,運(yùn)行更快,但是需要 dart 的運(yùn)行環(huán)境)

注:這里引用的是原作者的版本圖片,實(shí)習(xí)生同學(xué)項(xiàng)目中的版本有些變化,但是邏輯是這樣的

所以在項(xiàng)目里sass-loader找到了可以依賴的sass,所以沒(méi)有使用node-sass
因?yàn)檫@份node_modules是之前他誤操作install的,所以移除之后 項(xiàng)目正常運(yùn)行~

另:原作者推薦最好在 sass-loader 中指定 implementation 參數(shù)的方式,防止這種烏龍出現(xiàn)
原作者的具體做法和排錯(cuò)歷程異步這篇文章

做個(gè)筆記記錄。
done

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容