前言
Vite
产生于Vue
团队,是一个新型的构建打包工具,它具有如下特点。
- 极速的服务启动
- 轻量快速的热重载
- 丰富的功能
- 优化的构建
- 通用的插件
- 完全类型化的API
官方文档:cn.vitejs.dev/
关于webpack的构建过程分析
在重学webpack系列(八) -- webpack的运行机制与工作原理中,我们提到webpack
构建项目会根据资源模块的依赖关系构建依赖图
,根据依赖图
去加载/处理各种文件,这里我们不得不关注一下构建速度
与服务器的启动
问题,怎一个慢字了得。那再换一句话说就是,webpack
支持多种模块化,webpack
针对不同的模块化的处理方式为统一模块化处理
,也就是呼应了上文的遍历文件处理。
当我们开始构建越来越大型的应用时,需要处理的
JavaScript
代码量也呈指数级增长。包含数千个模块的大型项目相当普遍。基于JavaScript
开发的工具就会开始遇到性能瓶颈:通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR
),文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。
Vite
旨在利用生态系统中的新进展解决上述问题:浏览器开始原生支持ES
模块,且越来越多JavaScript
工具使用编译型语言编写。
Vite是如何解决这类的问题的
首先我们要明白webpack
应该是为了兼容性的考虑,所以webpack
支持多种模块化,但是vite
只是支持ESM
规范,所以此时不需要去遍历依赖图
文件了,进而问题就得到了解决。所以vite
项目能够更快的启动,为了方便理解,我们借用官网上的一张图。
我们可以看出,在
webpack
场景下,我们需要把所有的文件、依赖文件统统打包成Bundle
之后,才会去启动Server
,而在vite
场景下,我们是一开始就启动Server
,然后按需加载各种文件的。
关于vite的开箱即用
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<script src="./index.js" type="module"></script>
<body>
</body>
</html>
// index.js
import {kk} from './kk.js'
console.log(kk)
// kk.js
import _ from 'lodash'
export const kk = 0;
console.log(_)
我们的lodash
是通过npm i lodash -D
安装的,通常情况下加载资源文件的时候,会默认根据相对、绝对路径、node_module
去找资源,但是浏览器是基于ESM
的,所以会报出以下的错误。
所以我们这里需要借助vite
来实现资源加载,我们npm i vite -D
之后,启动服务器。键入以下命令:
npx vite // 用vite启动服务器
所以直接启动了一个服务器
也可以在package.json
里面配置:
"scripts": {
"start": "vite",
"build": "vite build"
}
服务启动:
启动之后,就会找到lodash
库,并输出:
create-vite、vite、create-vue之间的区别
- 关于
create-vue
的解读,请查看 =>> create-vue快速生成项目,到底是怎么做的 - 我们使用
npm create xx
来测试一下 npm create vite@latest
mac@MacdeMBP index % npm create vite@latest
// 选择项目名称
✔ Project name: … vite-project
// 选择框架
? Select a framework: › - Use arrow-keys. Return to submit.
Vanilla
❯ Vue
React
Preact
Lit
Svelte
Others
// 选择语言
? Select a variant: › - Use arrow-keys. Return to submit.
❯ JavaScript
TypeScript
Customize with create-vue ↗
Nuxt ↗
// 结果
✔ Project name: … vite-project
✔ Select a framework: › Vue
✔ Select a variant: › TypeScript
Scaffolding project in /Users/mac/Desktop/index/vite-project...
Done. Now run:
cd vite-project
npm install
npm run dev
效果图:
npm create vue@latest
mac@MacdeMBP index % npm create vue@latest
Vue.js - The Progressive JavaScript Framework
✔ Project name: … vue-project
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › Cypress
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes
Scaffolding project in /Users/mac/Desktop/index/vue-project...
Done. Now run:
cd vue-project
npm install
npm run format
npm run dev
效果图:
区别
create-vite
与create-vue
本身都是创建了一个快捷工程化项目,我们称之为cli
,create-vite
能够提供React
等框架的模板,create-vue
只是针对于vue3
所存在的一个cli
,他们都是基于vite
来创建服务器、打包的。
总结
vite
能够跟webpack
一样,能够实现资源模块的打包
、加载
,但是vite
相比于webpack
确实轻量了不少,他解决了webpack
遍历依赖文件的问题,换句话说webpack
考虑的是兼容性的问题(浏览器端
+ 服务端
),而vite
考虑的是浏览器端的资源文件加载
。那么下一章我们将会去扒开vite
的外衣去看看他的游戏规则
,请戳 >>> 前端构建工具vite进阶系列(二) -- vite的依赖预构建与配置文件相关处理