Vue3远程加载组件(vue引入外部组件)

boyanx5个月前技术教程31

一、Vite是什么?

首先,讲下Vite名字的由来,Vite实际上是法语中快的意思,所以顾名思义,这个工具就是为了给我们带来更快的开发体验,它是一个面向现代浏览器,基于ECMA标准的ES Module实现的一个更轻更快的Web应用开发工具


二、Vite为什么快

2.1 工作机制

为什么说只面向现代浏览器,而不顾之前的浏览器,是因为Vite本身是一个Web应用开发者工具,而对于开发者来说,一般都是使用比较先进的浏览器来进行开发,所以我们可以直接使用一些现代浏览器支持的特性,而不考虑去兼容一些老的浏览器。

而现代浏览器支持的特性中,在Vite中最为重要的一个,就是ES module。由于Vite是面向现代浏览器的,所以它利用浏览器去解析imports,在服务器端按需编译返回,跳过打包过程。同时支持Vue文件和HMR(热更新),针对生产环境可以使用Rollup打包。

ES Module是编译时静态加载(import/export),支持Tree-shaking

CommonJS是运行时动态加载(require/module.exports),无法静态优化。

2.2 和webpack启动流程对比

Vite启动流程

Webpack启动流程

1. 启动服务器

1. 扫描所有模块

2. 按需编译首个页面

2. 打包成bundle

3. 其他模块等请求时再处理

3. 启动服务器

这就像现点现做的盖饭,而不是像自助餐一样,提前准备所有菜品。 Vite像馆子里现点现做的厨师,而Webpack像是凌晨4点就需要备菜的食堂阿姨


三、 热更新(HMR)

热更新(Hot Module Replacement,HMR)是一种在开发过程中实时更新模块的技术,无需重新加载整个页面,从而提升效率。

3.1 Vite的热更新

Vite 的热更新(HMR)通过浏览器原生支持 ES 模块和 WebSocket 实现。当代码文件被修改时,Vite 服务端会精准定位到变化的模块,通过 WebSocket 通知浏览器,浏览器动态加载新模块并替换旧模块,无需刷新页面。例如修改 Vue 单文件组件时,仅该组件的实例会被更新,保留当前应用状态。

3.2 Webpack热更新有何不同

  • 实现方式:使用HotModuleReplacementPlugin插件,并配置webpack-dev-server启用HMR。
  • 工作原理:开发服务器监控文件变化,检测到变化后重新编译并推送更新,浏览器通过WebSocket接收并替换模块。

Vite 的 HMR 利用浏览器原生 ESM 特性,直接按需加载模块,无需打包,因此更新速度更快。而 Webpack 的 HMR 依赖打包后的模块系统,每次修改需重新构建依赖图,并通过 hot.accept 手动声明更新边界。

修改一个 Vue 文件时,Vite 仅替换该文件,而 Webpack 可能需要重新构建整个 chunk。


四、Tree shaking

Tree Shaking(摇树优化) 是一种在打包过程中静态分析并移除未被使用的代码(Dead Code) 的技术,通过消除未引用的模块或函数,减少最终构建产物的体积。

4.1 Vite的Tree sharking

Vite的Tree shaking核心是利用ES Module的静态结构特性。在打包时(比如生产环境构建),Vite会通过静态分析代码的导入导出关系,识别出哪些导出未被其他模块使用。这些未被使用的代码会被标记为dead code,最终由Rollup(Vite的生产打包工具)移除。

比如,如果一个工具库导出了10个函数,但项目只用了其中3个,剩余7个会被自动删除。与Webpack不同,Vite在开发模式下借助浏览器原生ESM能力也能实现按需加载,而生产环境则通过Rollup的优化算法实现更彻底的tree shaking。

4.2 和Webpack 的 Tree sharking 有什么区别?

Vite 与 Webpack 在开发与生产环境的构建机制存在差异,我们分开来讲。

4.2.1 开发环境

Vite的Tree shaking在开发阶段就利用浏览器原生ES Module的能力,实现实时按需加载,无需打包即可剔除未引用代码。
而Webpack在开发环境下仍需打包所有模块为浏览器可运行的格式(如ES5 + CommonJS),导致启动和热更新速度较慢。

4.2.2生产环境

在生产环境,Vite使用Rollup进行打包,其Tree shaking算法能精准识别跨模块的无效代码(如未使用的导出变量);

而Webpack默认配置可能残留部分未引用代码,需要手动配置optimization.usedExports等选项。

tip:Rollup 是一个专注于 ES Modules 的 JavaScript 模块打包工具,其核心优势是高效的 Tree-shaking和扁平化的输出结构。

优点:ESM 原生支持、Tree-shaking 精准、输出更简洁

附带问题:为什么Vite在开发环境不用打包,到了生产环境就需要打包了呢?

答:

  • 浏览器兼容性:生产环境需处理旧浏览器不支持的 ESM 语法(如 import.meta)。
  • 性能优化:合并代码、Tree-shaking、压缩等 Rollup 特性优化最终产物310。

五、与Webpack对比优劣势总结

维度

Vite

Webpack

构建原理

开发环境ESM原生加载 + 生产Rollup

全程打包(含开发环境)

启动速度

毫秒级(无需打包)

随项目增大指数级增长

HMR效率

精准更新(模块级替换)

需重建依赖图(文件级)

Tree-shaking

基于ESM的静态分析(更彻底)

依赖代码转换(需插件优化)

配置复杂度

开箱即用(预设优化)

需手动配置loader/plugin

浏览器兼容

需现代浏览器

支持旧浏览器(通过polyfill)

适用场景

SPA、现代框架项目

复杂工程、遗留系统改造

总结下来就是 Vite启动又快、打包又快且开箱即用对新手友好,缺点就是需现代浏览器,

六、 总结

  1. 开发范式差异
  • Vite采用Unbundled Development模式,利用浏览器直接解析ESM
  • Webpack坚持Bundled Development模式,需构建完整依赖图谱
  1. 模块处理机制
  • Vite通过ESM的import/export实现实时按需编译
  • Webpack需通过AST解析构建模块依赖关系图
  1. 生产构建策略
  • Vite使用Rollup打包(更擅长ESM处理)
  • Webpack自带打包系统(支持更复杂的代码拆分)
标签: tree.js

相关文章

Codeology:那些GitHub项目看上去是什么样子?

支付公司Braintree近日创建超级酷炫的开源代码可视化工具--Codeology,所以用户可以看到GitHub项目在各自产品中如何使用不同的编程语言。该可视化工具已经嵌入至GitHub公共API,...

2025 年值得尝试的 5 个被低估的 JavaScript 库

这些 JavaScript 库可能不会在社交媒体或 Hacker News 上流行起来,但它们会显著提高您的工作效率和代码质量。JavaScript 不再只是框架 。虽然 React、Vue 和 Sv...

从 “卡顿” 到 “秒开”:外投首屏性能优化的实战锦囊|得物技术

一、背景在互联网时代,网站性能的好坏直接影响用户体验和转化率。对投放的广告页面而言,如何在保证视觉效果和功能的同时提升加载速度,成为了开发者必须面对的挑战。本文将探讨几种有效的外投页面性能优化策略,包...

搞懂JS模块各个写法(搞懂js模块各个写法是什么)

搞懂 Commonjs、AMD、CMD、UMD、ES Modules先说Rollup是什么?是一个打包的ES Module的工具;Rollup 是一个 JavaScript 模块打包器,可以将小块代码...

一文带你了解生成树协议三个版本:STP、RSTP 和 MSTP

生成树协议(Spanning Tree Protocol,STP)及其后续改进版,如快速生成树协议(Rapid Spanning Tree Protocol,RSTP)和多生成树协议(Multiple...

Sonda 横空出世,JS 与 CSS 通用可视化和分析神器?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。什么是 Son...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。