分析一下Vue2.0中的vue-loader是如何处理.vue单文件组件的:

1.vueLoaderplugin 作用是 找到.vue,.vue.html的rules然后在他们的rule里添加 pitcher

rule中的顺序是这样的: [ pitch-loader, … … , vue-loader] (pitcher在在开始,vue-loader在最后,这一切是通过把...clonedrule放到中间来实现的)

* pitchloader的resourceQuery函数表明了,会对request中带有vue字段的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处理

vue-loader分析的更多相关文章

  1. vue 快速入门 系列 —— vue loader 下

    其他章节请看: vue 快速入门 系列 vue loader 下 CSS Modules CSS Modules 是一个流行的,用于模块化和组合 CSS 的系统.vue-loader 提供了与 CSS ...

  2. Vue Loader

    介绍 允许为 Vue 组件的每个部分使用其它的 webpack loader,例如在 <style> 的部分使用 Sass 和在 <template> 的部分使用 Pug(模板 ...

  3. vue 快速入门 系列 —— vue loader 上

    其他章节请看: vue 快速入门 系列 vue loader 上 通过前面"webpack 系列"的学习,我们知道如何用 webpack 实现一个不成熟的脚手架,比如提供开发环境和 ...

  4. vue 快速入门 系列 —— vue loader 扩展

    其他章节请看: vue 快速入门 系列 vue loader 扩展 在vue loader一文中,我们学会了从零搭建一个简单的,用于单文件组件开发的脚手架.本篇将在此基础上继续引入一些常用的库:vue ...

  5. 9 loader - 分析webpack调用第三方loader的过程

    注意:webpack处理第三方文件类型的过程: 1.发现这个要处理的文件不是JS文件,然后就去配置文件中,查找有没有对应的第三方loader规则 2.如果能找到对应的规则,就会调用对应的loader处 ...

  6. 配置webpack loader vue 报错:Module build failed: TypeError: this._init is not a function

    单文件组件 引入时报错 配置webpage.config.js中的vue 需要如下写法 { test: /\.vue/, loader: "vue-loader", } 之前写的l ...

  7. 基于vue实现一个简单的MVVM框架(源码分析)

    不知不觉接触前端的时间已经过去半年了,越来越发觉对知识的学习不应该只停留在会用的层面,这在我学jQuery的一段时间后便有这样的体会. 虽然jQuery只是一个JS的代码库,只要会一些JS的基本操作学 ...

  8. vue的第一个commit分析

    为什么写这篇vue的分析文章? 对于天资愚钝的前端(我)来说,阅读源码是件不容易的事情,毕竟有时候看源码分析的文章都看不懂.每次看到大佬们用了1-2年的vue就能掌握原理,甚至精通源码,再看看自己用了 ...

  9. vue Module parse failed: Unexpected token You may need an appropriate loader to handle this file type

    1.错误截图: 2.错误原因:webpack 原生只支持 js 文件类型,及 es5 的语法 3.解决方法:在webpack.config.js中,增加以下配置 module: { rules: [ ...

  10. Vue.js——60分钟webpack项目模板快速入门

    概述 browserify是一个 CommonJS风格的模块管理和打包工具,上一篇我们简单地介绍了Vue.js官方基于browserify构筑的一套开发模板.webpack提供了和browserify ...

随机推荐

  1. vue 列表渲染 v-for

    1.数组列表       v-for 块中,我们拥有对父作用域属性的完全访问权限.v-for 还支持一个可选的第二个参数为当前项的索引 1.1 普通渲染       v-for="item ...

  2. Linux安装FastDFS~Nginx~

    确保Linux联网,我这里使用的是CentOS7操作,联网教程 https://www.cnblogs.com/taopanfeng/p/10978752.html 先把指定的四个文件放入指定目录 安 ...

  3. keymaps - 对键盘映射文件的描述

    描述 (DESCRIPTION) loadkeys(1) 能够 通过 调入 指定的 文件 修改 键盘翻译表, 键盘翻译表 通常 用于 内核的 键盘驱动程序; 另外 dumpkeys(1) 可以 根据 ...

  4. ipc - System V 进程间通信机制

    SYNOPSIS 总览 # include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> # ...

  5. opencv-python用原图和mask实现抠图

    1.先上图 原图:test1.png mask图:test-mask.png 结果图:mask.png 2.代码部分 import cv2 from PIL import Image import n ...

  6. Codeforces1238F. The Maximum Subtree(树形dp)

    题目链接:传送门 思路: 题意说用线段的相交作为边,来构造树,所以不存在大于等于3个的线段两两相交,否则会构成环.因而构造出的树中,每个点最多只会与2个度大于1的节点相邻. 不妨把1设为树根,用deg ...

  7. RabbitMQ之消息持久化(队列持久化、消息持久化)

    rabbitMQ不支持数据库的持久化,只支持内存以及文件持久化 https://blog.csdn.net/bwh0520/article/details/78746873 http://blog.y ...

  8. SugarCRM开发入门

    SugarCRM官网下载地址:https://sourceforge.net/projects/sugarcrm/ 概述 Sugar最初是基于LAMP(Linux.Apache.MySQL和PHP)运 ...

  9. 算法复习_线性时间求解Majority Vote Algorithm问题

    题目来源于Leecode上的Majority Element问题 Majority Element:在一个序列中出现了至少n/2的下界次 使用排序算法取中位数则需要Nlogn http://www.c ...

  10. 6402. 【NOIP2019模拟11.01】Cover(启发式合并)

    题目描述 Description 小 A 现在想用