Skip to content

Commit 09a0ed3

Browse files
committed
Add Webpack Note
1 parent 9a93106 commit 09a0ed3

File tree

3 files changed

+157
-1
lines changed

3 files changed

+157
-1
lines changed

sidebar.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
- [前言](/)
2-
- bin
32
- Browser
43
- [动画](Browser/1.动画)
54
- [二进制数据](Browser/2.二进制数据)
@@ -51,3 +50,6 @@
5150
- shell
5251
- [npm和yarn](shell/1.npm和yarn)
5352
- [git](shell/2.git)
53+
- webpack
54+
- [核心概念](webpack/1.核心概念)
55+
- [API](webpack/2.API)

webpack/1.核心概念.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# 概念
2+
3+
## 入口(entry)
4+
5+
指示 webpack 应该使用哪个模块,来作为构建其内部 依赖图(dependency graph) 的开始。
6+
7+
描述入口的对象:
8+
9+
- dependOn: 当前入口所依赖的入口。它们必须在该入口被加载前被加载
10+
- filename: 指定要输出的文件名称
11+
- import: 启动时需加载的模块
12+
- library: 指定 library 选项,为当前 entry 构建一个 library
13+
- runtime: 运行时 chunk 的名字。如果设置了,就会创建一个以这个名字命名的运行时 chunk,否则将使用现有的入口作为运行时
14+
15+
常见场景
16+
17+
```js
18+
// 分离 app(应用程序) 和 vendor(第三方库) 入口
19+
module.exports = {
20+
entry: {
21+
main: './src/app.js',
22+
vendor: './src/vendor.js',
23+
},
24+
};
25+
26+
// 多页应用
27+
module.exports = {
28+
entry: {
29+
pageOne: './src/pageOne/index.js',
30+
pageTwo: './src/pageTwo/index.js',
31+
pageThree: './src/pageThree/index.js',
32+
},
33+
};
34+
```
35+
36+
## 输出(output)
37+
38+
output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件
39+
40+
即使可以存在多个 entry 起点,但只能指定一个 output 配置
41+
42+
## loader
43+
44+
loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中
45+
46+
### 使用 loader:
47+
48+
#### 配置方式(推荐)
49+
50+
在 webpack.config.js 文件中指定 loader,loader 从右到左(或从下到上)地取值(evaluate)/执行(execute)
51+
52+
```js
53+
module.exports = {
54+
module: {
55+
rules: [
56+
{
57+
test: /\.css$/,
58+
use: [
59+
// [style-loader](/loaders/style-loader)
60+
{ loader: 'style-loader' },
61+
// [css-loader](/loaders/css-loader)
62+
{
63+
loader: 'css-loader',
64+
options: {
65+
modules: true,
66+
},
67+
},
68+
// [sass-loader](/loaders/sass-loader)
69+
{ loader: 'sass-loader' },
70+
],
71+
},
72+
],
73+
},
74+
};
75+
内;
76+
```
77+
78+
#### 内联方式
79+
80+
在每个 import 语句中显式指定 loader
81+
82+
#### CLI 方式
83+
84+
在 shell 命令中指定它们: `webpack --module-bind pug-loader --module-bind 'css=style-loader!css-loader'`
85+
86+
### loader 特性
87+
88+
- 支持链式调用
89+
- 可以同步或者异步
90+
- loader 可以通过 `options` 进行对象配置
91+
- 可以直接通过`npm`模块导出 loader,也可以在 `modules.rules`中使用 loader 字段直接引用一个模块
92+
- plugin 可以为 loader 带来更多特性
93+
- loader 能够额外产生任意文件
94+
95+
## 插件(plugin)
96+
97+
插件可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。
98+
99+
webpack 插件是一个具有 apply 方法的 JavaScript 对象。apply 方法会被 webpack compiler 调用,并且在 整个 编译生命周期都可以访问 compiler 对象。
100+
101+
### 使用方法
102+
103+
```js
104+
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
105+
const webpack = require('webpack'); // 访问内置的插件
106+
107+
module.exports = {
108+
plugins: [
109+
new webpack.ProgressPlugin(),
110+
new HtmlWebpackPlugin({ template: './src/index.html' }),
111+
],
112+
};
113+
```
114+
115+
## 模块
116+
117+
在模块化编程中,开发者将程序分解为功能离散的 chunk,并称之为 模块。

webpack/2.API.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Webpack API
2+
3+
## CLI
4+
5+
### build
6+
7+
`build|bundle|b [entries...] [options]`
8+
默认命令,可省略
9+
10+
### configtest
11+
12+
`configtest|t [config-path]`
13+
校验 webpack 配置
14+
15+
### info
16+
17+
输出有关系统的信息
18+
19+
### init
20+
21+
初始化一个新的 webpack 配置
22+
23+
### loader
24+
25+
生成一个 loader 仓库
26+
27+
### plugin
28+
29+
生成一个 plugin 仓库
30+
31+
### serve
32+
`serve|s [options]`
33+
运行 webpack-dev-server
34+
35+
### watch
36+
`watch|w [entries...] [options]`
37+
运行 webpack 并监听文件变化

0 commit comments

Comments
 (0)