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

工程化(八股)

esm和cjs的区别

npm,yarn,pnpm的区别

webpack和vite的区别,vite为什么比webpack快

Webpack 和 Vite 都是现代前端构建工具,核心功能是将源代码(JS、CSS、图片等)处理为可在浏览器运行的产物,但两者的设计理念和实现方式有本质区别,这也导致了 Vite 在开发环境下的速度显著优于 Webpack。

区别

维度WebpackVite
开发模式基于 “打包”(Bundle-based)基于 “原生 ESM”(ESM-based)
核心思路提前打包所有模块为 bundle 文件开发时不打包,直接让浏览器解析 ESM
启动方式先打包再启动开发服务器直接启动服务器,按需编译模块
热更新机制重新打包变化模块及其依赖精确更新单个模块,无需重新打包

vite比webpack快原因

1.开发启动阶段:避免“全量预打包”

webpack

开发启动时,Webpack需要递归解析所有依赖,将所有模块打包成一个/多个bundle.js文件后,才会启动开发服务器。项目越大,打包时间越长,启动速度慢

vite

利用现代浏览器原生支持ESM的特性,开发时不做任何打包

启动服务器后,直接向浏览器返回原生 ESM 格式的源代码;

浏览器浏览器解析到import语句时,会主动向服务器请求对应的模块;

服务器仅在收到请求时,才对该模块进行编译(如js转ts sass转css),并返回给浏览器

这种“按需编译”的模式让 Vite 启动时间与项目规模无关(即使项目有 1 万个模块,启动时间也只需几百毫秒)。

2.热更新(HMR)阶段

webpack

当某一模块改变后,webpack需要重新打包该文件及其所有依赖,并将新的bundle发送到浏览器,模块依赖链越长,热更新耗时越久(可能需要几秒)

vite

vite的热更新基于原生ESM模块图,修改模块后仅重新编译被修改的模块(无需处理依赖链),通过import.meta.hotAPI通知浏览器替换该模块,不影响其他模块。即使是大型项目,热更新也能在毫秒级完成

3.依赖处理:预构建与缓存

Vite 并非完全不处理依赖,而是通过 “预构建” 优化第三方库(如 React、Vue)的加载:

第三方库通常是 CommonJS 格式(非 ESM),且包含大量小模块(如 Lodash 有数百个文件),浏览器直接加载会触发大量请求。

首次启动时,vite会用esbuild(Go 语言编写,比js快10-100倍)将第三方依赖预构建为ESM格式单文件(减少请求数),预构建结果会缓存到node_modules/.vite,后续启动直接复用,无需重新处理。

4.编译工具:esbuild 替代 Babel/Terser

Vite 在开发环境中使用 esbuild 处理代码转换(如 TS→JS、JSX→JS、压缩),而 Webpack 通常使用 Babel、Terser 等 JS 编写的工具:

  • esbuild 基于 Go 语言,性能远超 JS 工具(如编译 TS 的速度是 tsc 的 20 倍以上);

  • 仅在生产环境,Vite 才使用 Rollup 打包(因 esbuild 对代码分割、CSS 处理等生产特性支持不足)。

webpack的loader和plugin

1.Loader

Webpack 本质上只能处理 JavaScript 和 JSON 文件,而 loader 的作用是将非 JS 模块(如 CSS、图片、TS、Vue 组件等)转换为 Webpack 可识别的模块,以便纳入打包流程。

2.Plugin

Plugin(插件)是 用于扩展 Webpack 整体功能的工具,可以介入 Webpack 打包的整个生命周期(如打包前清理输出目录、打包后压缩文件、生成 HTML 等),解决 loader 无法处理的复杂问题。

webpack打包的全流程

Webpack 的打包流程是一个从 “读取配置” 到 “输出产物” 的完整生命周期,核心是将多个模块(JS、CSS、图片等)按依赖关系合并为最终可运行的静态资源。

(一)初始化阶段

1.读取配置文件

Webpack启动时,首先读取项目根目录的webpack.config.js,解析其中的配置项(如 entry 入口、output 输出路径、loaderplugin 等)。若未指定配置文件,使用默认配置(入口为 ./src/index.js,输出为 ./dist/main.js)。

2.初始化Compiler实例

根据配置创建 Compiler 对象(Webpack 的核心编译器),它包含了整个打包流程的所有信息,并注册配置中所有的 plugin(插件)。

3.确认入口文件

从配置的 entry 字段确定入口模块(可配置多入口,如 { app: './src/app.js', admin: './src/admin.js' }),作为依赖解析的起点。

(二)编译阶段

(三)优化阶段

(四)输出阶段

http://www.dtcms.com/a/550918.html

相关文章:

  • 百度云搭建网站商城网站的建设方案
  • 网站做电商资质吗西安有没有网站建设和营销的培训
  • 汕头模板自助建站叫别人做网站要注意什么
  • html5网站建设基本流程seo排名查询工具
  • 网站系统管理百度推广培训机构
  • 深圳万齐网站建设2020网络公司排名
  • 好未来披露Q2财报:营收8.61亿美元,净利润1.24亿美元
  • Java基础复习-中-集合
  • 【数据库】约束
  • 黄浦网站设计北京网站改版报价
  • 苏州企业网站制作服务wordpress 看不到主题
  • 心率血氧传感器介绍
  • Rust智能指针的奇妙之旅:从踩坑到顿悟
  • 鹰潭做网站的有什么网站是做平面设计的
  • 网站开发有哪些流程Wordpress 插件开发者
  • 公司网站一年多少钱苏州网站制作网络建设公司
  • 赣州网站建设哪家公司好wordpress后台登录不上
  • 服装公司电商网站建设规划建设银行网站最近都打不开吗
  • 浅谈 BSGS(Baby-Step Giant-Step 大步小步)算法
  • 大石网站建设做ppt找图片在哪个网站好
  • 在线简历制作网站免费做网站赚钱难
  • 【数字逻辑】24小时数字钟实战!74HC161搭24/60进制计数器+Multisim仿真
  • 架构师论文《论分布式缓存的设计与实现》
  • 网站建设模板51戴尔网站建设
  • jsp电影网站开发教程阿里云中英文网站建设
  • 网站开发开票税率北京谁会做网站开发
  • 台州网站制作建设宁波seo关键词优化设计
  • wordpress设置网站关键字wordpress口腔
  • 做网站要多少回扣郑州正岩建设集团网站
  • 番禺区建站服务商柳州论坛网站建设