Skip to content

Commit 069b846

Browse files
committed
2019.08.11
1 parent d7a9a39 commit 069b846

1 file changed

Lines changed: 57 additions & 49 deletions

File tree

Cute-Webpack/notes/bilibli-webpack4.0.md

Lines changed: 57 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
55
本教程没有太去介绍一些概念的问题了,在代码编写过程中,我会加上分析解释的介绍。
66

7-
### 一、 快速入门 demo
7+
## 一、 快速入门 demo
88

9-
#### 1. 项目初始化
9+
### 1. 项目初始化
1010

1111
新建文件夹 `leo`:
1212
```bash
@@ -21,7 +21,7 @@ cd leo
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
4648
import _ from 'lodash';
4749

@@ -54,6 +56,7 @@ document.body.appendChild(createElement());
5456
```
5557

5658
开发 `webpack.config.js`
59+
5760
```js
5861
const 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';
132135
import './style/index.css';// 引入样式文件
133136

134137
function 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
}
140143
document.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
155158
npm 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
178181
npx 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
469471
npm 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
544544
npm 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
573573
npm install uglifyjs-webpack-plugin --save-dev
574574
```
575575

576-
* **使用**
576+
引入插件:
577577

578578
```js
579579
// webpack.config.js
580580

581-
// ... 省略
582581
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
582+
```
583+
584+
使用插件:
585+
586+
```js
587+
// webpack.config.js
588+
// ... 省略
583589
module.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
644650
npm 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
689697
npm install clean-webpack-plugin --save-dev

0 commit comments

Comments
 (0)