这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
webpack定义
-
核心流程
- 入口处理 从entry 开始启动编译流程
- dependencies lookup 依赖解析 根据require 和import找到依赖项
- transform 资源解析 将png css等非标准js资源转译为js内容
- combine assets 资源合并打包 将转移后的资源打包为可以在浏览器运行的js
-
根据后缀名处理不同的文件
module:{ rules:[ test:/\.css/i,//这个后缀名的文件用use里面的loader处理,1. 这里的正则表达式不带引号,带引号是别的意思 use:["style-loader","css-loader"] ] } -
转译js代码 Babel 将高版本的js或者ts转译成低版本的浏览器能识别的代码
test:/\.js$/i use:[ { loader:"babel-loader" options:{//将options传递给loader presets:[ ["@babel/preset-env"] ]}}] -
使用插件生成HTML 可以不用手动去写HTML的模板
plugins:[new HTMLWebpackPlugin()] -
hmr 热更新 对代码的修改可以实时的体现在浏览器中
devServer:{ hot:true, open:true } watch:true//监视对代码的修改 -
tree-shaking 将用不到的代码删除
mode:"production"//同时会开启代码压缩 optimization:{ usedExports:true } -
loader 将非js资源转换为js资源
- style-loader 将css模块包进模块, 将内容注入到style标签
- css-loader 将css包装成导入导出语法 符合js的语法
- less-loader将less=>css
- loader链式调用
- 前一个loader处理过的内容将传递给下一个loader
-
plugin 插件对扩展开放 对修改封闭 降低项目复杂性
hook 编译过程的事件
-
plugin在webpack各个事件的执行过程中在合适的时机注入一些逻辑
比如在开始阶段用entryplugin将入口文件entry传递给webpakc
-
能用 掌握常用loader和plugin的配置, 能配置一些常用脚手架 例如vue-cli create-react-app=>理解并写一些loader 性能优化=>阅读源码 参与贡献