前言
项目需要对webpack进行升级,至最新版本4.x.0。So,边学边写文章。
webpack是时下最为热门的前端打包工具,将你的工程项目进行模块化处理。
核心概念
- 入口(entry)
- 输出(output)
- loader
- 插件(plugins)
- 模式(mode)
mode
webpack 4.0版本推广0配置使用webpack,在之前的版本中,我们都需要创建一个名为webpack.config.js的文件来配置webpack,但在webpack 4.0中我们可以不创建配置文件也能进行打包。(虽然0配置算的上是噱头,因为大型项目中默认配置是无法满足需求的)
webpack 4.0新增了mode的理念,development
和production
模式,前者将使用webpack在开发环境下的一些默认配置,打包后文件不会被压缩,后者会使用生产环境下的默认配置。
通过选择
development
或production
之中的一个来设置mode
参数,你可以启用相应模式下的webpack内置的优化。
1 | module.exports = { |
也可从CLI参数中传递:
1 | webpack --mode=production |
entry
入口是webpack的构建起始文件,webpack将从入口开始构建内部的依赖图,是整个项目的“根”。
1 | module.exports = { |
单个入口
上面一个demo的写法是下面写法的简写,当我们的工程只有一个入口时,可以使用上面的简写。
1 | const config = { |
多个入口
在多页面应用中,我们可能需要创建多个入口,像下面这样。
1 | const config = { |
output
我们需要告诉webpack在哪里输出打包后的文件。
配置output选项可以控制webpack如何向硬盘写入编译文件(生成打包后文件)。注意,即使可以存在多个入口起点,但只指定一个输出配置。
output至少包含以下两点:
path
指定输出目录的绝对路径。filename
指定输出文件的文件名。
1 | module.exports = { |
多个入口起点
如果配置了多个入口起点,需要保证每个文件具有唯一的名称。
1 | { |
loader
在JavaScript里import/require一张图片会报错,但在webpack下,这是允许的,这归功于加载器(loader)。webpack自身只理解Javascript,所以对于css,html,图片等文件需要通过loader来进行转换。使得webpack可以识别和处理这些文件。
1 | const path = require('path'); |
rules属性用来指示loader的处理逻辑,当webpack遇到.txt
文件时,将会使用rao-loader
先转换文件。在使用loader之前,需要先使用npm或yarn安装相应的loader。
使用loader的方式
- 配置(推荐):在
webpack.config.js
中指定loader,向上面的配置方式。
1 | module: { |
- 内联: 在每个
import
语句中指定loader。
1 | //使用 ! 将资源中的 loader 分开。分开的每个部分都相对于当前目录解析。 |
- CLI: 在
shell
命令中指定loader。
1 | webpack --module-bind jade-loader --module-bind 'css=style-loader!css-loader' |
plugins
插件可以为工程赋予更多的能力。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件目的在于解决loader无法实现的其他事
。
使用插件:你只需要require()
它,然后把它添加到plugins
数组中。
1 | const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装 |