vue-style-loader源码初步分析
背景:
首先声明一下,我只是个菜鸡,为了解决问题才去看的源码,解决完问题之后也就没有兴趣看其他部分代码了,所以这篇文章是一次很低层次的解读,角度也相当片面,想必会有很多喷点吧。
事情的经过是这样,今年十月底的时候对公司前端产品的构建工具做了一次升级,从webpack1升级到了webpack4,现在已经投入正式环境,写这篇文章的时候我在外边出差,忙的时候997,闲的时候也997,这会儿就有点闲得慌,所以就想着把之前的操作复盘总结一遍,这个过程其实非常顺利,没遇到过几次报错,打开build出来的文件之后却让我莫名的诧异,我的样式并没有挂载到dom元素中,但构建过程中并没有遇到过报错。我这边使用的前端框架是vue,由于解析vue文件样式代码的过程中需要用到的loader有vue-loader css-loader(或者其他css预处理语言的loader)、vue-style-loader,于是我就把问题定位到了这几个loader上面。因为之前有成功过的案例,在确认过我的配置跟之前写的配置一样之后,我对使用的这些依赖产生了怀疑,但是我实在是很好奇到底是哪个流程中除了问题,所以就对构建流程中这部分的细节进行了一些了解。
我起了一个新的入口文件和父组件,去除无关的代码来复现这个问题。
不多说,直接多图警告
事 故 现 场
执行完打包命令之后,按理来说打开dist目录中的index.html页面中应该就会出现一个傻不愣登的正方形色块比如:
但你我都知道如果这么顺利的话就不会有这篇水文存在了,实际上打开是这样的:






但问题来了:
我不可能真的去改node_modules中的vue-style-loader,因为每换一个环境,就需要改一次源码这肯定是不现实的,正确的解决办法一定不在这里。
我开始思考vue-style-loader与style-loader的区别,为什么style-loader就能顺利处理esModule呢,然后我在style-loader的代码中找到了线索,源码中有个名为options的json文件,描述了这个loader的配置项及其含义,其中有一个esModule属性:


从options中的附带链接也了解到了现在的css-loader也有个配置属性esModule,从css-loader@3.4.0(2019-12-17)开始,css-loader支持esModule属性,@4.0.0(2020-07-26)开始这个属性的默认值为true。
终于破案了,实际上是因为我复盘的时候,安装的style-loader、vue-style-loader、css-loader没有指定版本,默认安装了最新的依赖,css-loader、style-loader都把配置项的esModule默认值设为了true,而vue-style-loader最后一次更新已经是快三年前了,这期间的改动没有同步,所以vue-style-loader是不处理esModule的,所以这个问题的解决方法就出来了,只需要把css-loader的options添加上esModule:false就能够解决问题。
vue-style-loader源码初步分析的更多相关文章
- 学习 MyBatis 的一点小总结 —— 底层源码初步分析
目录 MyBatis 如何获取数据库源? MyBatis 如何获取 sql 语句? MyBatis 如何执行 sql 语句? MyBatis 如何实现不同类型数据之间的转换? 在过去程序员使用 JDB ...
- 从vue.js的源码分析,input和textarea上的v-model指令到底做了什么
v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能:对,它本质上只是一个语法糖,但到底是一个 ...
- TaskTracker任务初始化及启动task源码级分析
在监听器初始化Job.JobTracker相应TaskTracker心跳.调度器分配task源码级分析中我们分析的Tasktracker发送心跳的机制,这一节我们分析TaskTracker接受JobT ...
- 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)
在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔.再加上它出现得比较早,触摸失效问题也变得更加难以解 ...
- HashMap源码实现分析
HashMap源码实现分析 一.前言 HashMap 顾名思义,就是用hash表的原理实现的Map接口容器对象,那什么又是hash表呢. 我们对数组都很熟悉,数组是一个占用连续内存的数据结构,学过C的 ...
- Spring Ioc源码分析系列--Ioc源码入口分析
Spring Ioc源码分析系列--Ioc源码入口分析 本系列文章代码基于Spring Framework 5.2.x 前言 上一篇文章Spring Ioc源码分析系列--Ioc的基础知识准备介绍了I ...
- MapReduce的ReduceTask任务的运行源码级分析
MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...
- Activity源码简要分析总结
Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...
- MapReduce的MapTask任务的运行源码级分析
TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...
随机推荐
- 考研数学数一公式整理(微积分&线性代数&概率统计)
主要根据李永乐老师的线性代数讲义.全书和汤家凤老师的高数讲义整理的. 用于记背数学需要背的公式和步骤,概念.定义.公式多,方法步骤少(毕竟太庞杂了). 本来是自用,但还是分享一下,希望有补充指正! 链 ...
- DevOps Workshop | 代码管理入门:基于代码扫描实现团队效率提升
CODING「DevOps Workshop 学习营地」持续火热进行中! 在这里,你可以轻松实践 DevOps 全流程.体验高效的云端开发.赢取精美礼品--第二期大奖「戴尔 U2718Q 显示器」将于 ...
- MIT-6.004计算结构(2019年春)
L01: Introduction 略 L02: RISC-V Assembly 1.计算机处理器主要有三部分组成:内存.寄存器.算数逻辑单元 算数逻辑单元与寄存器通信,寄存器与内存通信,而算术逻辑单 ...
- uniapp cli版本中如何引入scss?
一.安装依赖 npm i node-sass@4.14.1 sass-loader -D 二.在脚手架版本新建项目成功后,官方为我们准备了uni.scss文件,在这个里面写即可全局使用. ... 一. ...
- Java MQTT 客户端之 Paho
Paho 自动重连后订阅的主题会清空,所以需要实现 MqttCallbackExtended 接口,在 connectComplete 方法添加订阅主题:而不是实现 MqttCallback 接口 一 ...
- Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解
☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...
- Python MoviePy中文教程导览及可执行音视频剪辑工具下载
☞ ░ 前往老猿Python博文目录 ░ <Python音视频剪辑库MoviePy1.0.3中文教程导览及可执行工具下载>是老猿两个关于moviepy的专栏<PyQt+moviepy ...
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...
- 转:浅析windows下字符集和文件编码存储/utf8/gbk
最近老猿在学习文件操作及网络爬虫相关知识,发现字符集及编码的处理非常重要,而老猿原来对此了解并不多,因此找了几篇文章看了一下,将老猿认为比较的相关文章转载一下.感谢各位原创大神! 1,字符集 这里主要 ...
- PyQt学习随笔:QStandardItemModel使用注意事项
老猿Python博文目录 老猿Python博客地址 在使用QStandardItemModel或其派生类作为view对象的数据存储时,有如下几点需要注意: 1.如果是多行多列的数据存储,对应视图如果没 ...