2019-12-01 16:22:51 +08:00
|
|
|
# webpack
|
|
|
|
> 这是个人学习webpack笔记
|
2019-12-01 16:23:51 +08:00
|
|
|
## 概念
|
|
|
|
webpack是一个静态文件打包器
|
2019-12-01 16:25:51 +08:00
|
|
|
他会递归生成一个依赖树 然后生产呢个一个或多个包(bundel)
|
2019-12-02 10:02:24 +08:00
|
|
|
### 需要了解四个概念
|
2019-12-01 16:25:51 +08:00
|
|
|
1. 入口
|
|
|
|
2. 输出
|
|
|
|
3. loader 加载
|
2019-12-01 16:26:51 +08:00
|
|
|
4. 插件
|
|
|
|
|
2019-12-02 10:02:24 +08:00
|
|
|
### 入口
|
2019-12-01 16:29:51 +08:00
|
|
|
入口是指webpack应在那个文件开始处理依赖图
|
2019-12-01 16:32:51 +08:00
|
|
|
然后输出到一个叫bundles(包)文件中
|
2019-12-01 18:23:51 +08:00
|
|
|
可以使用entry属性 定义入口
|
2019-12-02 09:57:24 +08:00
|
|
|
```
|
2019-12-01 18:24:51 +08:00
|
|
|
module.exports = {
|
|
|
|
entry: './path/to/my/entry/file.js'
|
|
|
|
};
|
2019-12-02 09:57:24 +08:00
|
|
|
```
|
2019-12-01 16:29:51 +08:00
|
|
|
|
2019-12-02 10:02:24 +08:00
|
|
|
### 出口
|
2019-12-01 18:25:51 +08:00
|
|
|
出口是告诉webpack将所打包成功的 bundel输出到哪个位置 以及如何命名
|
|
|
|
默认为./dist
|
2019-12-01 18:26:51 +08:00
|
|
|
可以使用output定义
|
2019-12-02 09:57:24 +08:00
|
|
|
```
|
2019-12-01 18:26:51 +08:00
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
entry: './path/to/my/entry/file.js',
|
|
|
|
output: {
|
|
|
|
path: path.resolve(__dirname, 'dist'),
|
|
|
|
filename: 'my-first-webpack.bundle.js'
|
|
|
|
}
|
|
|
|
};
|
2019-12-02 09:57:24 +08:00
|
|
|
```
|
2019-12-02 09:52:24 +08:00
|
|
|
path 输出目录
|
|
|
|
filename 输出文件名
|
|
|
|
|
2019-12-02 10:02:24 +08:00
|
|
|
### loader
|
2019-12-02 09:53:24 +08:00
|
|
|
loder 可以让webpack处理javascript文件之外的
|
|
|
|
默认webpack只可以处理javascript文件
|
2019-12-02 09:54:24 +08:00
|
|
|
loader将其他文件转化为webpack可以处理的有效模块文件
|
2019-12-02 09:55:24 +08:00
|
|
|
webpack loader配置有两个目标
|
2019-12-02 09:56:24 +08:00
|
|
|
- test属性 用来标识要处理的某个文件或某些文件
|
2019-12-02 09:57:24 +08:00
|
|
|
- use属性 表示转换时 用到那一个koader
|
|
|
|
```
|
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
const config = {
|
|
|
|
output: {
|
|
|
|
filename: 'my-first-webpack.bundle.js'
|
|
|
|
},
|
|
|
|
module: {
|
|
|
|
rules: [
|
|
|
|
{ test: /\.txt$/, use: 'raw-loader' }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = config;
|
|
|
|
```
|
2019-12-02 09:59:24 +08:00
|
|
|
定义时需要写道module.rules中
|
|
|
|
|
2019-12-02 10:02:24 +08:00
|
|
|
### 插件
|
2019-12-02 14:21:24 +08:00
|
|
|
loader可以作为转换某种类型的模块
|
2019-12-02 14:23:24 +08:00
|
|
|
插件可以做各式各样的工作?
|
2019-12-02 14:24:24 +08:00
|
|
|
引用插件 先require()
|
|
|
|
然后加入到plugis数组中
|
|
|
|
```
|
|
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
|
|
|
|
const webpack = require('webpack'); // 用于访问内置插件
|
|
|
|
|
|
|
|
const config = {
|
|
|
|
module: {
|
|
|
|
rules: [
|
|
|
|
{ test: /\.txt$/, use: 'raw-loader' }
|
|
|
|
]
|
|
|
|
},
|
|
|
|
plugins: [
|
|
|
|
new HtmlWebpackPlugin({template: './src/index.html'})
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = config;
|
|
|
|
```
|
2019-12-02 14:25:24 +08:00
|
|
|
### 模式
|
2019-12-02 14:26:24 +08:00
|
|
|
通过选择 ``` develompment ``` 与 ``` production ```之中的一个
|
|
|
|
```
|
|
|
|
module.exports = {
|
|
|
|
mode: 'production'
|
|
|
|
};
|
|
|
|
```
|
|
|
|
|
2019-12-02 14:27:24 +08:00
|
|
|
## 入口起点
|
2019-12-02 14:28:24 +08:00
|
|
|
> 在webpack中有多种定义entry的方法
|
|
|
|
### 单个入口起点
|
|
|
|
config
|
|
|
|
```
|
|
|
|
const config = {
|
|
|
|
entry: './path/to/my/entry/file.js'
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = config;
|
|
|
|
```
|