vue-loader分析


分析一下Vue2.0中的vue-loader是如何處理.vue單文件組件的:

 

1.vueLoaderplugin 作用是 對本次webpack編譯的所有rules做操作,添加pitch-loader和vue-loader,進行一個順序的重新排放,

最終rule中的順序是這樣的: [ pitch-loader, … … , vue-loader] (pitcher在在開始,vue-loader在最后,這一切是通過把...clonedrule放到中間來實現的)

 

(  * pitchloader的resourceQuery函數表明了,這個loader只會對request中帶有vue字段query的request使用pitchloader)

 

 

 

 

2.vue-loader 

 

      step1: 對於request上不帶type類型的Vue SFC進行parse 生成一個js module

( 將由source.vue提供 render函數/staticRenderFns,js script, style樣式,並交由normalizer進行統一的格式化,最終導出component.exports

 

      step2: 對新生成的js module 進行AST的解析以及相關依賴的收集過程,

      處理時,會處理step1中生成的帶vue字段的request,這些東東會交給pitcher loader來處理

      pitcherloader 會剔除eslint,剔除pitcher loader自身, 根據不同type進行處理, 生成返回新的帶vue字段的js module, 

 

  step3: 因為已經剔除掉pitcher loader了,在處理這個新返回的帶vue字段的的js module的時候,就不會再走pitchloader了,會經過下面的過程:

     

    styleblock:

   1.vue-loader(在最開始的時候把vue-loader放到rule最后了,所以執行的時候,它是第一個(pitch到最后然后從右向左執行,

   ( ⬆️ 抽離style block

   2. stylePostLoader(處理 作用域 scoped css

   3. css-loader(處理相關資源引入路徑

   4. vue-style-loader(動態創建style標簽插入css

   

     templateblock:

    1.vue-loader(抽離template block

    2.pug-plain-loader(將pug模塊轉化為html字符串

    3.templateLoader(編譯 html模版字符串,生成render/staticRenderfns函數並暴露出去

 

 

    *selectBlock方法 :

       selectBlock方法內部主要就是根據不同的type類型(template/script/style/custom

來獲取descriptor上對應類型的content內容並傳入到下一個loader處理

 )

 

 

 

在這個過程中,可以注意到,在處理一個sfc文件時,vue-loader自身被多次調用。


免責聲明!

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



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