- 打包工具由来
- 解决环境兼容性问题
- 模块多,请求频繁
- 所有的前端资源都需要模块化
- 需要做到
- 可以使用模块化优势,又不需担心模块化的影响
- 编译代码
- 将模块打包到同一文件当中,不需要多次请求
- 支持多种资源文件类型
- 打包工具概要
- 模块打包器
- 在打包过程中loader转换
- 代码拆分
- 将代码按照我们的需要去打包
- 资源模块
- 以模块化的方式加载任意资源模块
- 解决的是前端整体的模块化,并不单指JS的模块化
- 模块打包器
- Webpack快速上手
- webpack配置文件
- src/index.js ->dist/main.js 默认的 ```javascript const path = require(“path”) //node环境下 module.exports = { entry: “./src/main.js”, //指定入口文件 ./不能省略 output: { filename: “bundle.js”, //输出文件名称 path: path.join(__dirname, “output”), //指定文件输出的目录 }, }
- webpack工作模式- 默认是production- 加参数- --mode development 开发模式- 优化打包速度,添加调试的辅助- --mode none- 运行最原始状态的打包,不会做其它的处理- 在配置中指定,不需要手动指定- webpack打包结果运行原理- webpack资源模块加载- webpack默认只支持处理js代码- 加载其它的资源文件需要添加loader 来处理文件- webpack导入资源文件- 代码需要的时候动态的引入资源文件- 在js代码中引入- 是代码需要资源文件不是应用- 逻辑合理,js需要- 确保上线资源文件都是必要的- webpack文件资源加载器- file-loader- 打包时碰到文件,将文件拷贝到输出目录,将路径返回- webpack URL加载器- Data URLs- 当前url直接可以表示文件内容的方式,使用的时候不会发送http请求- data:image/png;base64,iiiiiii....- 使用体积比较小的文件- 小文件使用,减少请求次数- 大文件单独提取存放,提高加载速度- 通过配置文件实现```javascriptmodule: {rules: [{test: /.css$/, //正则匹配文件use: ["style-loader", "css-loader"], //使用的Loader,从后往前执行},{test: /.png$/,use: {loader:"url-loader",options:{ //配置选项,需要安装file-loaderlimit:10 * 1024 //10kb 限制大小 10kb一下的文件转换 ,超过10kb的文件交给file-loader}},},], //其它文件加载规则的配置},
- webpack常用加载器分类
- 编译转换类
- 将模块转化为js代码,实现js运行css
- 文件操作类型加载器
- 加载到的资源模块拷贝到输出的目录
- 导出访问路径
- 代码检查类
- 统一代码风格,提高代码质量
- 编译转换类
webpack处理es6
- webpack使用babel来处理
- 只是打包工具
{test: /.js$/,use: {loader:"babel-loader",options:{presets:['@babel/preset-env']}}},
webpack加载模块方式
- 遵循 ES Modules
- CommonJS
- AMD
- 项目最好只使用一种标准
- 样式代码中的import 指令和url函数也会触发相应资源模块加载
- HTML代码中src属性
- webpack核心工作原理
- 先找到一个入口文件,在入口文件代码中的Import或require,解析每个模块对应的依赖
- 生成依赖树
- 递归依赖数,找到每个节点的资源文件
- 根据配置文件的rules属性找到模块对应的加载器
- 交给对应的加载器处理
- 放到bundle.js里边
- loader是webpack的核心
