基础篇——webpack基础用法(三)

  上一章节主要介绍了entryoutputloaderspluginsmode等核心概念以及简单的使用方法的介绍,接下来主要介绍文件的解析、压缩、热更新原理等。

1.解析ES6和react jsx语法

TIM截图20200717212446.png

注:es6中有许多新的js语法,webpack并不能识别这些语法,所以需要使用babel-loader插件进行解析,但是babel-loader是依赖babel的,所以需要配置preset,代码如下
TIM截图20200719090431.png

注:需要安装@babel/core、@babel/preset-env、babel-loader
npm install @babel/core @babel/preset-env babel-loader -D

TIM截图20200719092638.png

注:需要安装@babel/preset-react
npm install @babel/preset-react -D

2.解析CSS、Less和Sass

(1)解析CSS

TIM截图20200719101722.png

解析css样式要安装style-loader、css-loader
npm install style-loader css-loader -D

这里有个需要注意的地方,是style-loader为什么放在css-loader前面?
因为loader加载的时候是链式加载,执行的顺序是从右到左,所以先解析css文件,然后将解析后的css文件交给style插入到html中。

(2)解析Less和Sass

TIM截图20200719105418.png

只要字啊use里加一个less-loader即可解析less
这里已解析less为例,安装less、less-loader
npm install less less-loader -D

3.解析图片和字体

(1)解析图片

TIM截图20200719111237.png

安装file-loader
npm install file-loader -D

(2)解析字体
TIM截图20200720165042.png
(3)其他方式资源解析

安装url-loader
npm install url-loader -D

TIM截图20200720172345.png

图中的limit(字节)是设置图片的最小大小,如果图片的大小小于limit设置的值url-loader会将图片解析成base64在页面上进行展示。
TIM截图20200720181252.png

上图是自己写的demo,在search.js中引用图片资源,此示例为未使用url-loader时文件大小134kb

TIM截图20200720181139.png

上图是自己写的demo,在search.js中引用图片资源,此示例为使用url-loader时文件大小145kb
将图片装换成base64时,文件会变大/(ㄒoㄒ)/~~

4.webpack文件监听

TIM截图20200721160252.png

TIM截图20200721160422.png

TIM截图20200721161315.png

4.webpack中的热更新及原理分析

上一节中讲解了webpack文件监听可以实现文件的自动构建,但是每次必须手动刷新浏览器,那么有没有不用每次手动刷新浏览器,自动构建文件呢?答案是肯定的,热更新

第一种方法:热更新:webpack-dev-server
TIM截图20200721162013.png

注意:WDS因为是放在内存中,而watch是有对系统进行文件的输出,所以在构建速度上WDS也是明显快于watch的
接下来我们实际操作一下:

(1)第一步

在package.json中添加一个dev命令,配置好webpack-dev-server;
npm i webpack-dev-server -D

TIM截图20200721162850.png

--open自动打开默认的浏览器

(2)第二步

修改webpack.config.js中的modedevelopment,因为production是生产环境下使用的,而development是开发环境下使用的,所以在使用WDS的情况下,要将mode修改为development

TIM截图20200721163401.png

(3)第三步

配置HotModuleReplacementPlugin插件和devServer,因为HotModuleReplacementPlugin是webpack内置插件,所以不用额外安装的。

TIM截图20200721164024.png

接下来运行npm run dev查看运行结果
TIM截图20200721164532.png

第二种方法:热更新:使用webpack-dev-middleware
TIM截图20200722144930.png

注:通常适用express、koa等后端服务,需要引用nodejs

热更新原理分析

TIM截图20200722145227.png

webpack Compile:是webpack的编译器,将js的源代码编译成bundle.js(打包好输出的文件);
Bundle Server:提供文件在浏览器的访问。比如说打包好的bundle.js,浏览器正常访问是以文件目录的形式访问的,而Bundle Server能够让你以服务器的方式访问,如:localhost:8080/bundle.js。
HMR Runtime:会在开发阶段的打包阶段将HMR Runtime注入到浏览器端的bundle.js中,这样浏览器端就会和服务器端建立连接,通常这个连接是webSocket,这样就会更新文件的变化。当它收到某些变化的文件,就会自动更新整个文件;
过程:通常分为两个部分:

  1. 启动阶段:在文件系统里面进行编译,将初始的代码通过webpack compile进行打包,然后将包好的文件传输给Bundle Server(服务器),bundle server让这个文件以server的方式,能够让浏览器访问的到。①→②→A→B;
  2. 开发阶段:当开发时文件发生变化,代码还是会经过webpack compile编译打包,编译好之后,它会将这个代码发送给HMR Server(服务端),然后HMR Server就会知道哪些资源、文件发生了改变,然后通知HMR Runtime(客户端)哪些文件发生了变化,服务器端通知客户端通常是以json数据的格式进行传输,最后HMR Runtime就会更新代码,并刷新浏览器。①→②→③→④→⑤;
    以上就是热更新的原理。

5.文件指纹策略:chunkhash、contenthash和hash

(1)什么是文件指纹?

TIM截图20200722153619.png

优点:通常做文件版本的管理

(2)js文件指纹如何生成?
TIM截图20200722153927.png

注:一般js用Chunhash,css用Contenthash

(3)文件指纹的设置
TIM截图20200722154500.png
(4)css文件指纹的设置

TIM截图20200722154642.png

注:如果正常的情况下我们使用style-loader、css-loader的话,那么这个css会由style-loader插入到html文件的head头部,但是并没有独立的css文件,如下
TIM截图20200722161406.png

npm i mini-css-extract-plugin -D
因此我们使用MiniCssExtractPlugin这个插件,将head头部里面的css样式提取出来生成一个css文件。
该插件不能和style-loader同时使用

(5)图片的文件指纹设置
TIM截图20200722162054.png

6.HTML 、CSS和JavaScript代码压缩

TIM截图20200722164603.png
(1)js文件的压缩
TIM截图20200722164737.png
(2)css文件的压缩

TIM截图20200722164844.png

cssnano:css文件处理器
npm i optimize-css-assets-webpack-plugin cssnano -D

(3)html文件的压缩

TIM截图20200722165048.png

npm i html-webpack-plugin -D

7.总结

  到这里webpack基础篇已经讲完了,下一章节开始webpack进阶篇

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335