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

前端 JS 经典:构建工具

前言:相信很多小伙伴在平时听得最多的,就是前端工程化巴拉巴拉什么的,而构建工具就是前端工程化很重要的一环。那么什么是构建工具呐,就是可以对我们的项目进行编译、测试、打包、优化、压缩等功能的工具,称为构建工具,而前端构建工具有很多,常见的分为两类,一类是基于任务的打包工具 grunt、gulp,另一类是基于模块的打包工具 webpack、vite、esbuild、roolup、parcel、browserify。而这么多的构建工具,我们要都想掌握,所需要付出的时间成本和精力成本对比所得到的收获,是不成正比的,所以,我们需要紧跟时代潮流,洞悉最新流行技术,本文主要讲解,vite 最新构建工具,和 webpack 使用最多工具。

一:Vite

可以参考 Vite 官方文档速通。

1. 介绍

Vite 是一种新型的前端构建工具,特别设计用于快速开发。Vite 支持使用原生 ES 模块作为开发环境,采用按需编译的方式,因此在开发过程中能够获得更快的冷启动速度。Vite 集成了 Vue.js,但也可以用于其他框架或库。

2. 优点

快速的冷启动、即时的热更新、按需编译

3. 缺点

功能不如 webpack 强大

4. 原理

| 使用 esbuild 对依赖进行预构建,esbuild 的打包速度很快。

| 利用浏览器对 esm 原生支持这一特性,让浏览器接管了打包程序的部分工作。

| 按需加载:在浏览器执行 esm 的 import 时,浏览器会向开发服务器请求该模块。

| 热更新是基于 websocket 实现的,也是在 esm 上执行的,只更新编辑了的文件,而不是把整个页面重新编译。

| vite 使用 http 缓存来加速页面的重新加载,源码模块会进行协商缓存,依赖模块会进行强缓存。

| 使用 rollup 进行打包,因为 rollup 和 vite 的 api 能够很好的兼容,而且社区比较活跃,有很多插件可以使用。

| 打包对代码进行优化,tree-shaking、懒加载和分割等优化。

二:webpack

1. 介绍

Webpack 是一个现代化的静态模块打包工具,它将前端项目中的各种资源(JavaScript、CSS、图片等)视为模块,并通过依赖关系进行静态分析和打包。

2. 优点

模块化支持、打包优化、插件系统、开发工具支持

3. 缺点

学习成本高、配置复杂、构建速度慢

4. 原理

| 入口点识别:Webpack 根据配置文件中指定的入口点(entry)开始分析项目的依赖关系。

| 依赖分析:Webpack 通过解析入口文件和其依赖文件,构建整个项目的依赖关系图。它可以识别出哪些文件被引入、被依赖,并形成一个依赖关系树。

| 模块转换:Webpack 根据配置文件中的各种规则(如加载器-loader)对各个模块进行转换,将它们转换为浏览器可理解的格式(如将 ES6 转换为 ES5,将 SCSS 转换为 CSS)。

| 打包输出:在完成模块转换后,Webpack 将所有的模块打包成一个或多个输出文件,通常是一个或多个 JavaScript 文件。这些输出文件可以在浏览器中加载和执行。

相关文章:

  • Java 编程入门:从零开始
  • linux学习(六)
  • 【Linux】:Linux 2.6内核 调度队列和调度原理
  • JavaWeb_SpringBootWeb
  • 手搓顺序表(C语言)
  • 代码随想录算法训练营Day2|977.有序数组的平方、59.螺旋矩阵||、 209.长度最小的子数组
  • okcc呼叫中心系统TTS语音群呼功能如何使用?
  • 专业上门预约洗衣洗鞋管理系统一站式解决方案
  • OrangePi AIpro 开箱初体验及语音识别样例
  • 41-2 DDOS基础
  • 守护景区安全:探讨景区视频监控方案的搭建及必要性
  • R语言lavaan结构方程模型(SEM)
  • element+ 引入图标报错 Failed to resolve import “@element-plus/icons-vue“ from “
  • C++-指针
  • 【TCP协议中104解析】wireshark抓取流量包工具,群殴协议解析基础
  • #Java异常处理
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • C++类的相互关联
  • java第三方包学习之lombok
  • Java方法详解
  • js作用域和this的理解
  • learning koa2.x
  • Swift 中的尾递归和蹦床
  • Vue 2.3、2.4 知识点小结
  • webgl (原生)基础入门指南【一】
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 搞机器学习要哪些技能
  • 蓝海存储开关机注意事项总结
  • 区块链技术特点之去中心化特性
  • ​iOS实时查看App运行日志
  • # Panda3d 碰撞检测系统介绍
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #Ubuntu(修改root信息)
  • #数学建模# 线性规划问题的Matlab求解
  • ( 10 )MySQL中的外键
  • (13)Hive调优——动态分区导致的小文件问题
  • (C语言)字符分类函数
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (PADS学习)第二章:原理图绘制 第一部分
  • (Python) SOAP Web Service (HTTP POST)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)测试工具
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)视频码率,帧率和分辨率的联系与区别
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 反射的使用
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)