44
55本教程没有太去介绍一些概念的问题了,在代码编写过程中,我会加上分析解释的介绍。
66
7- ### 一、 快速入门 demo
7+ ## 一、 快速入门 demo
88
9- #### 1. 项目初始化
9+ ### 1. 项目初始化
1010
1111新建文件夹 ` leo ` :
1212``` bash
2121然后本地安装 ` webpack ` 和 ` webpack-cli ` (在 Webpack 4.0以后需要单独安装):
2222
2323``` bash
24- npm i -D webpack webpack-cli
24+ npm install webpack webpack-cli --save-dev
2525```
2626
2727初始化项目结构:
@@ -35,13 +35,15 @@ npm i -D webpack webpack-cli
3535```
3636
3737安装 ` lodash ` :
38+
3839``` bash
39- npm i -S lodash
40+ npm install lodash --save-dev
4041```
4142
4243* ` --save ` 可以简写为` -S ` , ` --save-dev ` 可以简写为` -D ` .*
4344
4445开发 ` index.js ` :
46+
4547``` js
4648import _ from ' lodash' ;
4749
@@ -54,6 +56,7 @@ document.body.appendChild(createElement());
5456```
5557
5658开发 ` webpack.config.js ` :
59+
5760``` js
5861const path = require (' path' );
5962
@@ -67,7 +70,7 @@ module.exports = {
6770}
6871```
6972
70- #### 2. 打包测试
73+ ### 2. 打包测试
7174
7275开始第一次打包任务:
7376
@@ -96,11 +99,11 @@ Entrypoint main = main.js
9699```
97100
98101
99- ### 二、 webpack 处理 CSS 模块
102+ ## 二、 webpack 处理 CSS 模块
100103
101104这一部分,我们开始学着使用 ` webpack ` 去处理 ` css ` 相关的模块。
102105
103- #### 1. 修改代码
106+ ### 1. 修改代码
104107
105108在项目 ` src ` 目录中,新建 ` style ` 文件夹,并新建 ` index.css ` 文件:
106109```
@@ -132,10 +135,10 @@ import _ from 'lodash';
132135import ' ./style/index.css' ;// 引入样式文件
133136
134137function createElement (){
135- let div = document .createElement (' div' );
136- div .innerHTML = _ .join ([' my' , ' name' , ' is' , ' leo' ], ' ' );
137- div .className = ' box' ;
138- return div;
138+ let div = document .createElement (' div' );
139+ div .innerHTML = _ .join ([' my' , ' name' , ' is' , ' leo' ], ' ' );
140+ div .className = ' box' ;
141+ return div;
139142}
140143document .body .appendChild (createElement ());
141144```
@@ -147,9 +150,9 @@ document.body.appendChild(createElement());
147150* ` css-loader ` : 用于处理 ` css ` 文件,使得能在 js 文件中引入使用;
148151* ` style-loader ` : 用于将 ` css ` 文件注入到 ` index.html ` 中的 ` <style> ` 标签上;
149152
150- #### 2. 安装配置插件
153+ ### 2. 安装配置插件
151154
152- 首先通过 ` npm ` 去安装这两个插件 :
155+ 安装插件 :
153156
154157``` bash
155158npm install --save-dev style-loader css-loader
@@ -172,7 +175,7 @@ module: {
172175
173176这段代码中,` test ` 的值表示** 需要匹配的模块后缀名** ,` use ` 则表示对应** 处理的 loader 插件名称** (处理顺序是从右往左)。
174177
175- #### 3. 打包测试
178+ ### 3. 打包测试
176179
177180``` bash
178181npx webpack
@@ -194,12 +197,11 @@ Entrypoint main = main.js
194197
195198![ webpack01] ( http://images.pingan8787.com/webpack01.png )
196199
197-
198- ### 三、 webpack 的模块和处理 sass
200+ ## 三、 webpack 的模块和处理 sass
199201
200202在这一节中,我们会介绍 ` weboack ` 中关于模块的一些概念,并且会介绍在上一节基础上,如何去处理 ` sass ` 文件。
201203
202- #### 1. webpack 模块介绍
204+ ### 1. webpack 模块介绍
203205
204206这里介绍的模块(module)是指 ` webpack.config.js ` 文件中的 ` module ` 配置,它决定了如何处理项目中的不同类型模块。
205207
@@ -217,9 +219,9 @@ webpack 模块支持如下语句:
217219
218220另外,所有的 [ webpack 配置选项] ( https://www.webpackjs.com/configuration/ ) 可以在中文官网查看,我们入门只学习常用模块。
219221
220- #### 2. 常用模块
222+ ### 2. 常用模块
221223
222- ##### 2.1 ` module.noParse `
224+ #### 2.1 ` module.noParse `
223225
224226值的类型:` RegExp | [RegExp] | function `
225227
@@ -235,7 +237,7 @@ module: {
235237}
236238```
237239
238- ##### 2.2 ` module.rules `
240+ #### 2.2 ` module.rules `
239241
240242创建模块时,匹配请求的规则数组。按照规则为对应模块使用对应的 ` loader ` ,或修改解析器(parser)。
241243
@@ -258,11 +260,11 @@ module: {
258260` {test : Condition} ` :** 匹配** 特定条件,非必传,支持一个** 正则表达式** 或** 正则表达式数组** ;
259261` {include : Condition} ` :** 匹配** 特定条件,非必传,支持一个** 字符串** 或** 字符串数组** ;
260262` {exclude : Condition} ` :** 排除** 特定条件,非必传,支持一个** 字符串** 或** 字符串数组** ;
261- ` {and : [Condition]} ` :必须匹配数组中的所有条件;
262- ` {or : [Condition]} ` :匹配数组中任一条件;
263- ` {not : [Condition]} ` :必须排除这个条件;
263+ ` {and : [Condition]} ` :必须匹配数组中的所有条件;
264+ ` {or : [Condition]} ` :匹配数组中任一条件;
265+ ` {not : [Condition]} ` :必须排除这个条件;
264266
265- > 更多参数介绍,可访问中文官网的介绍:
267+ > 更多参数介绍,可访问中文官网的介绍:
266268> [ 《Rule》] ( https://www.webpackjs.com/configuration/module/#rule ) https://www.webpackjs.com/configuration/module/#rule
267269
268270``` js
@@ -283,7 +285,7 @@ module: {
283285
284286```
285287
286- #### 3. 加载 Sass 文件
288+ ### 3. 加载 Sass 文件
287289
288290需要使用到 ` sass-loader ` 的插件,这里先安装:
289291
@@ -314,7 +316,7 @@ import './style/leo.scss';
314316![ webpack03] ( http://images.pingan8787.com/webpack03.png )
315317
316318
317- #### 4. 小技巧
319+ ### 4. 小技巧
318320
319321像 ` npx webpack ` 这个命令我们需要经常使用,对于这种命令,我们可以把它写成命令,方便每次使用。
320322
@@ -330,11 +332,11 @@ import './style/leo.scss';
330332
331333
332334
333- ### 四、 webpack 开启 SourceMap 和添加 CSS3 前缀
335+ ## 四、 webpack 开启 SourceMap 和添加 CSS3 前缀
334336
335337添加 ` SourceMap ` 是为了方便打包之后,我们在项目中调试样式,定位到样式在源文件的位置。
336338
337- #### 1. 开启 ` SourceMap `
339+ ### 1. 开启 ` SourceMap `
338340
339341在 ` css-loader ` 和 ` sass-loader ` 都可以通过设置 ` options ` 选项启用 ` sourceMap ` 。
340342
@@ -366,7 +368,7 @@ rules: [
366368这样我们在开发过程中,调试样式就方便很多了。
367369
368370
369- #### 2. 为样式添加 CSS3 前缀
371+ ### 2. 为样式添加 CSS3 前缀
370372
371373这里我们用到 ` PostCSS ` 这个 ` loader ` ,它是一个 CSS ** 预处理工具** ,可以为 CSS3 的属性** 添加前缀** ,样式格式校验(` stylelint ` ),提前使用 ` CSS ` 新特性,实现 ` CSS ` 模块化,防止 ` CSS ` 样式冲突。
372374
@@ -385,7 +387,7 @@ npm install postcss-loader autoprefixer --save-dev
385387* ` postcss-import ` 让我们可以在` @import ` CSS文件的时 ` webpack ` 能监听并编译。
386388
387389
388- ` postcss-loader ` 更多介绍和使用可以查看文档[ 《postcss-loader》] ( https://www.webpackjs.com/loaders/postcss-loader/ ) 。
390+ ` postcss-loader ` 更多介绍和使用可以查看文档[ 《postcss-loader》] ( https://www.webpackjs.com/loaders/postcss-loader/ ) https://www.webpackjs.com/loaders/postcss-loader/ 。
389391
390392开始添加 ` postcss-loader ` 并设置 ` autoprefixer ` :
391393
@@ -453,7 +455,7 @@ rules: [
453455![ webpack05] ( http://images.pingan8787.com/webpack05.png )
454456
455457
456- ### 五、 webpack 将 CSS 抽取成单独文件
458+ ## 五、 webpack 将 CSS 抽取成单独文件
457459
458460在之前学习中,CSS 样式代码都是写到 ` index.html ` 的 ` <style> ` 标签中,这样样式代码多了以后,很不方便。
459461
@@ -463,15 +465,13 @@ webpack4 开始使用 `mini-css-extract-plugin` 插件,而在 1-3 版本使用
463465
464466> 注意:抽取样式以后,就不能使用 ` style-loader ` 注入到 html 中。
465467
466- #### 1. 安装 ` mini-css-extract-plugin `
468+ 安装插件:
467469
468470``` bash
469471npm install mini-css-extract-plugin --save-dev
470472```
471473
472- #### 2. 使用 ` mini-css-extract-plugin `
473-
474- 我们需要引入 ` mini-css-extract-plugin ` :
474+ 引入插件:
475475
476476``` js
477477// webpack.config.js
@@ -530,21 +530,21 @@ plugins: [
530530<link rel =" stylesheet" href =" main.css" >
531531```
532532
533- ### 六、 webpack 压缩 CSS 和 JS
533+ ## 六、 webpack 压缩 CSS 和 JS
534534
535535为了缩小打包后包的体积,我们经常做优化的时候,将 CSS 和 JS 文件进行压缩,这里需要使用到不同的插件。
536536
537- #### 1. 压缩 CSS
537+ ### 1. 压缩 CSS
538538
539539使用 ` optimize-css-assets-webpack-plugin ` 压缩 CSS 的插件。
540540
541- * ** 安装 **
541+ 安装插件:
542542
543543``` bash
544544npm install optimize-css-assets-webpack-plugin --save-dev
545545```
546546
547- * ** 使用 **
547+ 使用插件:
548548
549549``` js
550550// webpack.config.js
@@ -562,24 +562,30 @@ module.exports = {
562562
563563重新打包,可以看到 ` main.css ` 已经被压缩成一行代码,即压缩成功~
564564
565- #### 2. 压缩 JS
565+ ### 2. 压缩 JS
566566
567567使用 ` uglifyjs-webpack-plugin ` 压缩 JS 的插件。
568568
569569
570- * ** 安装 **
570+ 安装插件:
571571
572572``` bash
573573npm install uglifyjs-webpack-plugin --save-dev
574574```
575575
576- * ** 使用 **
576+ 引入插件:
577577
578578``` js
579579// webpack.config.js
580580
581- // ... 省略
582581const UglifyJsPlugin = require (' uglifyjs-webpack-plugin' );
582+ ```
583+
584+ 使用插件:
585+
586+ ``` js
587+ // webpack.config.js
588+ // ... 省略
583589module .exports = {
584590 // ... 省略
585591 plugins: [
@@ -602,11 +608,11 @@ module.exports = {
602608
603609![ webpack07] ( http://images.pingan8787.com/webpack07.png )
604610
605- ### 七、webpack 为文件名添加 hash 值
611+ ## 七、webpack 为文件名添加 hash 值
606612
607613由于我们打包出来的 ` css ` 、` js ` 文件是静态文件,就存在缓存问题,因此我们可以给文件名添加 ` hash ` 值,防止缓存。
608614
609- #### 1. 添加 hash 值
615+ ### 1. 添加 hash 值
610616
611617直接在 ` webpack.config.js ` 中,为需要添加 hash 值的文件名添加 ` [hash] ` 就可以:
612618
@@ -632,13 +638,13 @@ module.exports = {
632638
633639![ webpack08] ( http://images.pingan8787.com/webpack08.png )
634640
635- #### 2. 动态引用打包后的文件
641+ ### 2. 动态引用打包后的文件
636642
637643由于我们前面给打包的文件名添加了 ` hash ` 值,会导致 ` index.html ` 引用文件错误,所以我们需要让它能动态引入打包后的文件。
638644
639645这里我们使用 ` HtmlWebpackPlugin ` 插件,它可以把打包后的 CSS 或者 JS 文件直接引用注入到 HTML 模版中,就不用每次手动修改。
640646
641- 安装 :
647+ 安装插件 :
642648
643649``` bash
644650npm install html-webpack-plugin --save-dev
@@ -677,13 +683,15 @@ plugins: [
677683![ webpack09] ( http://images.pingan8787.com/webpack09.png )
678684
679685
680- ### 八、 webpack 清理目录插件
686+ ## 八、 webpack 清理目录插件
681687
682688在之前,我们每次打包都会生成新的文件,并且在添加 hash 值以后,文件名不会出现重复的情况,导致每次打包都会生成新文件,并且这些文件都用不到。
683689
684690为了解决这个问题,我们需要在每次打包之前,将 ` /dist ` 目录清空,再进行打包。
685691
686- 这里我们使用 ` clean-webpack-plugin ` 插件来实现:
692+ 这里我们使用 ` clean-webpack-plugin ` 插件来实现。
693+
694+ 安装插件:
687695
688696``` bash
689697npm install clean-webpack-plugin --save-dev
0 commit comments