深入梳理Webpack配置逻辑
12views
Webpack5提供了非常强大、灵活的模块打包功能,且其 Plugin、Loader生态数量庞大,但代价是日益复杂、晦涩的使用方法。仅 Webpack 原生配置项就多达上百种,如何理解配置及配置件的关系是一个头疼的问题。
Webpack 打包过程非常复杂,但大致上可以简化为:
流程类配置
输入输出:
entry
:定义项目入口文件,Webpack 会从这些入口文件开始找出所有项目文件context
:项目执行上下文路径output
:配置产物输出路径、名称等;模块处理:
resolve
:配置模块路径解析规则,更精确、高效地找到指定模块module
:配置模块加载规则,例如针对什么类型的资源需要使用哪些 Loader 进行处理externals
:声明外部资源,Webpack 会直接忽略这部分资源,跳过这些资源的解析、打包操作optimization
:控制如何优化产物包体积,内置 Dead Code Elimination、Scope Hoisting、代码混淆、代码压缩等功能target
:配置编译产物的目标运行环境,支持 web、node、electron 等值,不同值最终产物会有所差异mode
:编译模式短语,支持 development、production 等值,可以理解为一种声明环境的短语工具类配置
开发效率类:
watch
:配置持续监听文件变化,持续构建devtool
:配置产物 Sourcemap 生成规则devServer
:配置与 HMR 强相关的开发服务器功能性能优化类:
cache
:Webpack 5 之后,用于控制如何缓存编译过程信息与编译结果performance
:当产物大小超过阈值时,如何通知开发者日志类:
stats
:控制编译过程的日志内容infrastructureLogging
:控制日志输出方式,例如可以通过该配置将日志输出到磁盘文件