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自身被多次调用。

posted @ 2019-08-25 21:42  hh9515  阅读(1008)  评论(0编辑  收藏  举报