Webpack
Webpack 是什么
webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。
在webpack 看来, 前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理。
它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。
Webpack 五个核心概念
Entry
入口(Entry):指示 webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。
Output
输出(Output):指示 webpack 打包后的资源 bundles 输出到哪里去,以及如何命名。
Loader
Loader:让 webpack 能够去处理那些非 JS 的文件,比如样式文件、图片文件(webpack 自身只理解
JS)
Plugins
插件(Plugins):可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,
一直到重新定义环境中的变量等。
Mode
模式(Mode):指示 webpack 使用相应模式的配置。
development:
会将 DefinePlugin 中
process.env.NODE_ENV
的值设置为 development。启用
和 ```NamedModulesPlugin```。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
特点: 能让代码本地调试运行的环境。
2. production
会将 DefinePlugin 中 ```process.env.NODE_ENV``` 的值设置为 production。
启用
```FlagDependencyUsagePlugin,```
```FlagIncludedChunksPlugin,```
```ModuleConcatenationPlugin,```
```NoEmitOnErrorsPlugin,```
```OccurrenceOrderPlugin,```
```SideEffectsFlagPlugin 和 TerserPlugin```。
特点: 能让代码优化上线运行的环境。
### 编译打包应用
创建 src 下的 js 等文件后,不需要配置 webpack.config.js 文件,在命令行就可以编译打包。
指令:
- 开发环境:
```shell
webpack ./src/index.js -o ./build/built.js --mode=development
webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js 整体打包环境,是开发环境
- 生产环境:webpack会以 ./src/index.js 为入口文件开始打包,打包后输出到 ./build/built.js 整体打包环境,是生产环境
1
webpack ./src/index.js -o ./build/built.js --mode=production
结论:
- webpack 本身能处理 js/json 资源,不能处理 css/img 等其他资源
- 生产环境和开发环境将 ES6 模块化编译成浏览器能识别的模块化,但是不能处理 ES6 的基本语法转化为 ES5(需要借助 loader)
- 生产环境比开发环境多一个压缩 js 代码
1 | // resolve用来拼接绝对路径的方法 |