node-sass背鍋記

今天遇到的case,立此存照。

緣起

今天,深圳部門同事反饋又一件奇事:前不久,可以在jenkins上正常打包的代碼,node.js項目,今早,突然就不行了。報錯,說我們的jenkins client上沒有Python 2環(huán)境:

gyp verb `which` failed Error: not found: python2

分析

下面的小伙伴搞不定,就報到我這里來了。先按常規(guī)套路,排除了npm源,jenkins節(jié)點空間,docker鏡像之類的問題。順著出錯log先前看,發(fā)現(xiàn)了更有價值的出錯信息:

npm info lifecycle node-sass@4.20200618.1~postinstall: node-sass@4.20200618.1

> node-sass@4.20200618.1 postinstall /home/jenkins/workspace/xxx/node_modules/node-sass
> node scripts/build.js

Building: /usr/local/bin/node /home/jenkins/workspace/xxx/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
gyp info it worked if it ends with ok
gyp verb cli [ '/usr/local/bin/node',
gyp verb cli   '/home/jenkins/workspace/xxx/node_modules/node-gyp/bin/node-gyp.js',
gyp verb cli   'rebuild',
gyp verb cli   '--verbose',
gyp verb cli   '--libsass_ext=',
gyp verb cli   '--libsass_cflags=',
gyp verb cli   '--libsass_ldflags=',
gyp verb cli   '--libsass_library=' ]

喲,原來是在安裝node-sass@4.20200618.1 這個包時出的問題。
對比之前正確時的輸出:

[node-sass@4.13.0](mailto:node-sass@4.13.0) postinstall /home/jenkins/workspace/xxx/node_modules/node-sass

原來如彼~
因為4.13的node-sass,我們在編譯鏡像里預提供了,而最新版本的node-sass,卻需要從源碼重新編譯而導致失敗。

解決

接下來的事,就方便解決了。讓前端開發(fā)的同事,在package.json里,固定好node-sass的版本,不要隨便自動升級就好。
package.json

...
# "node-sass": "^4.12.0" 這是之前的樣子,要更改為下面一行
"node-sass": "4.13.0"
...

擴展

徒手安裝node-sass,本來也是一件要細心和耐心的事,國內(nèi)用戶一般通過設置淘寶的二進制地址解決。

node-sass簡介

Sass、LessStylus等CSS預處理器的出現(xiàn)大大的提升了CSS的開發(fā)速度和代碼可讀性,相對來說Sass功能更全面、使用的更廣泛。

Node-sass是一個庫,它將Node.js綁定到LibSass(流行樣式表預處理器Sass的C版本)。它允許用戶以令人難以置信的速度將.scss文件本地編譯為css,并通過連接中間件自動編譯。
Sass是一種預處理器腳本語言,可以解釋或編譯成層疊樣式表(CSS)。

Sass包含兩種語法:較舊的語法使用縮進將代碼塊和換行符分隔為單獨的規(guī)則;較新的語法SCSS使用像CSS這樣的塊格式。它使用大括號來表示代碼塊和分號來分隔塊中的行。

縮進語法和SCSS文件傳統(tǒng)上分別給出擴展名.sass和.scss

知乎上的說法:

node-sass 編譯器是通過 C++ 實現(xiàn)的。
在 Node.js 中,采用 gyp 構建工具進行構建 C++ 代碼,而 GYP 是基于 Python 2 開發(fā)的,所以需要 python,而且不支持 3。
當然,要編譯 C++ 還需要一個 C++ 編譯器,類似 gcc,不同操作系統(tǒng)下需要的環(huán)境也不同,參考官網(wǎng)說明。所以如果你之前沒有配置過 node-gyp 構建環(huán)境,只裝上 python2 還是不行的。
要是覺得配置環(huán)境麻煩,node-sass 本身提供對應不同系統(tǒng)的二進制版本,直接重新安裝即可。

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

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