vue中webpack和less填坑:項目運行起來報錯TypeError: this.getOptions is not a function


好久沒怎么用less了,今天在vue項目中突然想用less來改輪播圖的樣式,做一個穿透。折騰幾何,昏昏欲死,歷經各番查閱,終於解決,此時心中飛過無數省略號!

下面細說一下經歷和填坑記錄:

我使用的vue版本是2.5.2,webpack版本是3.6.0,注意版本!之前本人嘗試升級過webpack4.0配合使用sass,因為使用sass必須安裝node-sass和sass-loader,使用中發現webpack4.0對於sass存在兼容性問題,一般解決問題的方案是把node-sass降級處理。

此外,也發生過extract-text-webpack-plugin還不能支持webpack4.0.0以上的版本的情況,所以自行升級webpack4.0使用,問題還是比較多的。對於webpack大家要注意全局安裝和本地安裝的版本的一致性。

好了,話歸正狀,此處討論less填坑。vue中使用less的流程:

安裝less和less-loader    =>    webapck中配置module模塊下的rules數組項,新增對less文件的解析規則     =>     組件中使用<style lang="less"></style>即可

注意注意,這三步過程中,你可能都會犯低級錯誤:

1.安裝時,如果采用less和less-loader同時安裝,請按rules里書寫的相反順序來安裝,否則會報錯!即npm i less less-loader -S為正解!npm i less-loader less-S為誤操作!注意最好帶上-S或-D,不帶的話某些情況下會造成模塊包依賴的無故丟失的未知錯誤!  ==>解決方法一般是把項目依賴的包刪了,重新yarn或者npm i 一下!

2.rules配置規則:瀏覽器是從你書寫的末項loader到你書寫的首項loader來解析的!rules是一個數組,數組成員為對象,每個對象里定義test的正則和使用的loader,有兩種寫法:

{test:/\.css/,use:['style-loader','css-loader',less-loader']}  或者  {test:/\.css/,loader:'style-loader!css-loader!less-loader'} 

注意loader的順序不能亂,從右往左解析,瀏覽器是先less-loader解析,不能解析再css-loader解,css-loader不行再style-loader出馬,所以順序亂了運行起來必然報錯!

3.組件中使用時,切記:給style標簽加上lang="less"屬性,否則運行時,還是會報錯!如果樣式只作用於當前組件,不讓它影響其他組件,就再在style標簽上加上scoped屬性!

以上三步我都無誤,但是運行就報錯了,因為腳手架自動安裝的less-loader版本是8.x的版本了,所以一運行起來就又報錯:

TypeError: this.getOptions is not a function  xxxxxxxxx……(此處省略老媽媽的裹腳——又臭又長)

解決方案:把less-loader卸載后降級換成5.0的版本!注意less是生產環境使用,線上環境不需要,故用--save-dev,具體操作如下:

npm uninstall less-loader  ,再 npm i less-loader@5.0 -D。

此外,swiper插件使用過程中發現6.0以上版本國內還沒有成熟文檔指引,所以最好還是使用5.x的版本,推薦安裝5.4.5的版本,即npm i swiper@5.4.5 -S即可。

至此,填坑完畢!npm run dev原地滿血復活!


免責聲明!

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



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