当前位置: 首页 > news >正文

前端开发深入了解webpack

什么是webpack

Webpack 是一个现代 JavaScript 应用程序的模块打包工具。它主要用于将各种资源(如 JavaScript、CSS、图片等)打包成一个或多个文件,以优化Web应用的加载性能。

Webpack 的核心功能包括:

  1. 模块化:支持将代码拆分为模块,便于管理和重用。
  2. 打包:将多个模块和资源打包成一个或多个文件,减少HTTP请求。
  3. 加载器(Loaders):处理不同类型的文件(如转换 ES6 到 ES5、编译 Sass 等)。
  4. 插件(Plugins):扩展功能,执行各种任务,例如代码压缩、环境变量管理等。
  5. 热模块替换:在开发过程中实时更新模块,提升开发效率。
     

webpack编译原理(构建流程)

  1. 初始化:读取配置文件(如webpack.config.js),初始化Compiler对象
  2. 构建模块:解析入口文件,找到所有依赖模块
  3. 编译模块:调用所有配置的loader对文件进行转换
  4. 生成依赖图:生成所有模块的AST(抽象语法树),并提取依赖关系,生成依赖图
  5. 完成编译模块并输出:根据entry配置(依赖图)生成代码块chunk(一个或多个打包文件)
  6. 输出完成:输出所有的chunk到指定目录
  7. 监听(可选):在开发模式下,Webpack 可以监视文件变化,自动重新构建和刷新浏览器

loader和plugin的区别

loader

  • 主要用于转换模块的内容
  • 在构建过程中将文件从一种格式转换为另一种格式(如将ES6转换为ES5)
  • 通过module.rules配置

plugin

  • 用于扩展Webpack的功能,执行更广泛的任务
  • 可以处理构建过程中的各种操作,如优化、压缩、生成文件等
  • 通过plugins数组配置

总结:Loader处理单个文件的转换,Plugin用于整体构建过程的扩展和优化

常用的loader和plugin

loader

  • babel-loader:将ES6/ES7代码转换为向后兼容的JavaScript
  • css-loader:解析CSS文件中的@import和url(),使其能够被Webpack处理
  • style-loader:将CSS插入到DOM中,通常与css-loader一起使用
  • file-loader:处理文件导入,生成文件并返回其URL
  • url-loader:类似于file-loader,但可以将小文件转换为Data URL
  • sass-loader:将Sass/SCSS文件编译为CSS
  • less-loader:将Less文件编译为CSS

plugin

  • HtmlWebpackPlugin:动态生成HTML文件,并自动引入Webpack打包的资源
  • MiniCssExtractPlugin:将CSS提取成单独的文件,而不是内联在JS中
  • CleanWebpackPlugin:在每次构建前清理输出目录
  • Webpack.DefinePlugin:定义全局常量,便于在代码中使用
  • TerserWebpackPlugin:用于压缩JavaScript代码,优化性能
  • OptimizeCSSAssetsPlugin:压缩和优化CSS文件
  • CopyWebpackPlugin:将静态资源复制到输出目录

webpack处理跨域

通过代理的方式,在 webpack.config.js 中使用 devServer 的 proxy 配置

devServer: {proxy: {'/api': {target: 'http://backend-server.com',changeOrigin: true,},},
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【中秋月饼系列】2024年立体月饼新鲜出炉----python画月饼(1)附完整代码
  • 【Unity学习心得】如何使用Unity制作“饥荒”风格的俯视角2.5D游戏
  • 【随手笔记】
  • 安宝特案例 | AR如何大幅提升IC封装厂检测效率?
  • 安卓显示驱动
  • Unreal Engine——AI生成高精度的虚拟人物和环境(虚拟世界构建、电影场景生成)(一)
  • 喜报 | 知从科技荣获 “AutoSec 安全之星 - 优秀汽车软件供应链安全方案奖”
  • Linux创建虚拟磁盘并分区格式化
  • 剑灵服务端源码(c#版本+数据库+配套客户端+服务端)
  • 嵌入式学习——数据结构——顺序表
  • 20. 如何在MyBatis中处理多表关联查询?常见的实现方式有哪些?
  • 【代码随想录训练营第42期 Day57打卡 - 图论Part7 - Prim算法
  • 拉取ros2_control_demos存储库
  • 单链表的查找与长度计算
  • Pandas中Series()函数的用法
  • [笔记] php常见简单功能及函数
  • android 一些 utils
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JS笔记四:作用域、变量(函数)提升
  • Puppeteer:浏览器控制器
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • select2 取值 遍历 设置默认值
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue.js-Day01
  • 安卓应用性能调试和优化经验分享
  • 动态魔术使用DBMS_SQL
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于组件的设计工作流与界面抽象
  • 使用 Docker 部署 Spring Boot项目
  • 用Python写一份独特的元宵节祝福
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​​​【收录 Hello 算法】9.4 小结
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (12)Linux 常见的三种进程状态
  • (9)目标检测_SSD的原理
  • (C++20) consteval立即函数
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)80c52学习之旅-起始篇
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net操作Excel出错解决
  • .Net的DataSet直接与SQL2005交互
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @RequestMapping-占位符映射
  • @RunWith注解作用
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [AR Foundation] 人脸检测的流程
  • [BFS广搜]迷阵