全局配置
mode
打包模式"development"
打包结果不会被压缩"production"
打包结果被压缩
devtool
"source-map"
生成sourcemap文件,报错会映射到源码位置,便于调试"eval"
默认值 打包将每个模块执行eval
,打包速度快,但调试不方便
loader
webpack默认只能处理js模块,可以使用loader对其他类型模块进行处理
样式
- 打包处理css文件需要:
- 安装
style-loader
和css-loader
- 在
webpack.config.js
中新增配置节点module
,module有rule属性(数组)
存放所有第三方文件匹配处理规则
1 | module:{ |
- 加载less文件用
less-loader
, 记得安装less
- 加载**scss(sass)**用
sass-loader
(依赖node-sass
) 安装node-sass一般用cnpm, 否则可能失败。vue脚手架创建的项目可能出现this.getResolve
not found,使用8以下的sass-loader版本
兼容:postcss-loader搭配postcss-preset-env插件可兼容大多数现代游览器样式
url地址
webpack默认不能处理url地址,需要使用url-loader
(依赖于file-loader
)
file-loader
读取静态文件模块,url-loader
与file-loader
相似,但可将较小文件url转换为base64的uri
1 | module:{ |
use属性
的值可用url中?
方式传参(&
分隔) :limit
— 当文件大小不超过limit设置的字节数时才使用base64格式(默认全部使用base64)name
— 设置处理后路径中的目标文件名, 它的值可以写:[hash:n]
— n位数的随机hash值[name]
— 原目标文件名[ext]
— 原目标文件后缀
1 | 'url-loader?limit=字节数&name=[hash:8]-[name].[ext]' |
内联方式指定模块loader:
import "<loaderName">!<modulePath>
资源模块类型
在webpack5中,可以使用不同的type
属性来代替一些资源loader,可以是如下值:
asset/resource
发送单独文件并导出url (之前用file-loader)asset/inline
导出data uri (之前用url-loader转base64)asset/source
导出资源源代码 (之前用raw-loader)asset
自动选择发送文件或转为data uri,通过parser.dataUrlConfition
配置转换条件 (之前用url-loader并配置limit为转换条件)
使用该方法可通过
type
统同级的generdator
配置输出的规则
plugin
loader只能对模块进行处理转换,而插件可以对webpack打包整个过程进行丰富
DefinePlugin
内置插件 创建在编译时可使用的全局常量。配合HtmlWebpackPlugin
可方便地自定义入口模板 index.htmlClearWebpackPlugin
每次打包时清理之前打的包CopyWebpackPlugin
复制文件,有被其他插件编译处理的要配置忽略
babel
babel工具链可转义js,在旧游览器兼容es6或更高级的语法
通过babel-loader
与webpack配合,在打包时进行转换
@babel/core
babel核心代码,必须安装- 插件:对于不同的特性,需要不同的babel插件,但需要一个个安装
- 预设:只需设置
presets
即可预设常用的特性,比一个个安装插件方便:@babel/preset-env
提供es6常用语法
babel相当于编译器有三个流程: 解析 => 转换 => 生成
- 源代码 => 词法分析 => tokens数组
- tokens数组 => 语法分析 => ast抽象语法树
- 遍历ast => 应用插件 => 新的ast
- 通过新ast生成新的源代码
webpack中实现babel相关loader功能:
需要安装两套包:
1.1
cnpm i babel-core babel-loader babel-plugin-transform-runtime -D
1.2
cnpm i babel-preset-env babel-preset-stage-0 -D
1.2.1
babel-preset-env
提供比babel-preset-es2015
更新的,包含所有es相关语法在webpack.config.js配置属性module中新增rules匹配规则:
1
2{test:/\.js$/, use: 'babel-loader', exclude: /node_modules/}
//exculde排除环境依赖包中的js项目根目录新建**.babelrc**(json格式)来配置babel:
plugins
中放置安装的babel插件(以babel-plugin开头)presets
放置安装的预设(语法)(以babel-preset开头)配置时开头都不加
1
2
3
4{
"presets": ["env", "stage-0"],
"plugins": ["transform-runtime"]
}
- babel-loader8不兼容babel-core6,所以用babel-loader7。注意版本匹配
优化
项目中使用普通方式导入模块,都会被打包到app.js。可使用import(path)
导入:
1 | //返回promise实例 |
也可以使用
SplitChunksPlugin
提取公共代码chunk,在加载时会被放到缓存区
- 本文作者: MR-QXJ
- 本文链接: https://mr-qxj.github.io/2021/10/30/打包/webpack/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!