Skip to content

Commit a624a29

Browse files
author
Cookie Feng
authored
Update README.md
1 parent f412e82 commit a624a29

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
# 什么是webpack
1+
## 什么是webpack
22
可以引用官网的一幅图解释,我们可以看到webpack,可以分析各个模块的依赖关系,最终打包成我们常见的静态文件,.js 、 .css 、 .jpg 、.png。今天我们先不弄那么复杂,我们就介绍webpack是怎么分析ES6的模块依赖,怎么把ES6的代码转成ES5的。
33

44
![](https://user-gold-cdn.xitu.io/2019/3/2/1693ed9df7905766?w=2124&h=928&f=png&s=153846)
55

6-
# 实现
6+
## 实现
77
由于ES6转ES5中需要用到babel,所以要用到一下插件
88

99
`npm install @babel/cord @babel/traverse @babel/core @babel/preset-env --save-dev`
10-
## 需要的文件
10+
### 需要的文件
1111
使用webpack肯定少不了原文件,我们会涉及三个需要打包的js文件(`entry.js``message.js``name.js`
1212

1313
```
@@ -50,10 +50,10 @@ function bundle(graph) {//代码略}
5050
- bundler.js
5151
```
5252

53-
## 如何分析依赖
53+
### 如何分析依赖
5454
webpack分析依赖是从一个入口文件开始分析的,当我们把一个入口的文件路径传入,webpack就会通过这个文件的路径读取文件的信息(读取到的本质其实是字符串),然后把读取到的信息转成AST(抽象语法树),简单点来说呢,就是把一个js文件里面的内容存到某种数据结构里,里面包括了各种信息,**其中就有当前模块依赖了哪些模块**。我们暂时把通过传**文件路径**能返回文件信息的这个函数叫 `createAsset`
5555

56-
## `createAsset`返回什么
56+
### `createAsset`返回什么
5757
第一步我们肯定需要先从 `entry.js` 开始分析,于是就有了如下的代码,我们先不关心`createAsset`具体代码是怎么实现的,具体代码我会放在最后。
5858
```
5959
createAsset("./example/entry.js");
@@ -62,22 +62,22 @@ createAsset("./example/entry.js");
6262
![](https://user-gold-cdn.xitu.io/2019/3/2/1693eee846b82ac0?w=1482&h=560&f=png&s=101080)
6363
通过 `createAsset` 我们成功拿到了`entry.js`的依赖,就是 `dependencies` 数组。
6464

65-
## `createGraph`返回什么,如何找下一个依赖
65+
### `createGraph`返回什么,如何找下一个依赖
6666
我们通过上面可以拿到entry.js依赖的模块,于是我们就可以接着去遍历`dependencies` 数组,循环调用`createAsset`这样就可以得到全部模块相互依赖的信息。想得到全部依赖信息需要调用 `createGraph` 这个一个函数,它会进行广度遍历,最终返回下面的数据
6767

6868
![](https://user-images.githubusercontent.com/15076030/53696618-e8055b80-3e03-11e9-82b6-83b81f5cd82a.png)
6969

7070
我们可以看到返回的数据,字段之前都和大家解释了,除了 `mapping``mapping`这个字段是把当前模块依赖的**文件名称** 和 模块的id 做一个映射,目的是为了更方便查找模块。
7171

72-
## `bundle`返回什么 && 最后步骤
72+
### `bundle`返回什么 && 最后步骤
7373
我们现在已经能拿到每个模块之前的依赖关系,我们再通过调用`bundle`函数,我们就能构造出最后的`bundle.js`,输出如下图
7474

7575
![](https://user-images.githubusercontent.com/15076030/53690721-1efb5300-3dab-11e9-9f9b-b4ef4c0691da.png)
7676

7777

78-
## 源码
78+
### 源码
7979
[点击查看源码](https://github.com/dykily/simple_webpack/blob/master/bundler.js)
80-
# 最后
80+
## 最后
8181
文章可能有不足的地方,请大家见谅,如果有什么疑问可以下方留言讨论。
8282

8383
如果大家对文字描述还是不太清楚,建议看我下方提供的视频,我就是从视频中学的,这个是在youtube上的视频,大家懂的,有条件的还是建议看一下。😝

0 commit comments

Comments
 (0)