🍎 系列文章
在系列中,将从零学习Vite,系统梳理 Vite 本身的知识,也包括 Vite 底层所使用的 Esbuild、Rollup 双引擎、Babel 编译工具链、模块规范标准等等构建生态。
前言
使用 Vite 的初始化命令创建一个React项目,让你理解这个项目究竟是如何运行起来的,不仅体验到 Vite 的快速和轻量,同时也能学会基本的前端开发环境的搭建,安装编辑器、Node.js环境、包管理器pnpm。
环境搭建
安装 Node.js,可以通过这个命令 :
node -v
检查系统是否安装了 Node.js, 如果没有可以进入 nodejs.org 官网下载相应的安装包进行安装。推荐 v16.0.0
及以上版本,,如果低于这个版本,推荐使用 nvm
、n
工具切换node.js版本。
安装完 Node.js 之后,包管理器 npm
也会被自动安装,你可以执行下面的命令来验证:
npm -v
其中包管理器有npm
yarn
pnpm
,这里推荐使用pnpm
,它能前两者都存在比较严重的性能和安全问题。
可以通过这个命令 :
npm install -g pnpm
由于默认的镜像源在国外,包下载速度和稳定性不太好,建议你换成国内的镜像源,命令如下:
pnpm config set registry https://registry.npmmirror.com/
项目初始化
搭建完基本的前端开发环境之后,进入到项目初始化阶段,在终端命令行中输入:
pnpm create vite
pnpm 会自动下载create-vite 并执行这个包中的项目初始化逻辑,然后我们就可以看到一个交互界面,后续的交互流程如下:
- 输入项目名称,如:vite-project
2. 选择前端框架
Vite内置了以下不同前端框架的脚手架模板,这里我们选择 react
框架为例
Vanilla //无前端框架
Vue //基于Vue
React //基于React
Preact //基于Preact(一款精简版的类React框架)
lit //基于lit(一款Web Components框架)
Svelte //基于Svelte
Qwik //基于Qwik
Others //其他(如:electron)
3. 选择开发语言
这里我们选择 TypeScript
这样脚手架的模板就已经生成完毕,执行如下命令在本地启动项目:
cd vite-project
pnpm install
pnpm run dev
执行pnpm run dev
之后看到如下界面,表示项目已经成功启动了
在浏览器打开 http://localhost:5173
可以看到:
至此,我们成功搭建了一个 React 前端项目。
项目加载
项目的目录结构如下:
在项目根目录中有一个 index.html
文件,Vite 默认会把这个 index.html
作为入口文件。
可以看到这个 HTML 文件的内容非常简洁,在body标签中除了 id 为 root 的根节点之外,还包含了一个声明了type="module"的script标签:
<script type="module" src="/src/main.tsx"></script>
由于现代浏览器原生支持了 ESM ,因此原生的 ES 语法也可以直接放到浏览器中执行,只需要在 script 标签中声明type="module"即可。比如上面的 script 标签,相当于请求了http://localhost:5173/src/main.tsx 这个资源,Vite 的 Dev Server 此时会接收到这个请求,然后读取对应的文件内容,进行一定的中间处理,最后将处理的结果返回给浏览器。
我们可以来看看 main.tsx
的内容:
现代浏览器并不识别 tsx 语法,也无法直接 import css 文件,上面这段代码究竟是如何被浏览器正常执行的呢?
在读取到 main.tsx 文件的内容之后,Vite Dev Server 会对文件的内容进行编译,把编译后的结果返回给浏览器。其中 Vite 内部的编译流程,会在后面的进阶文章深入分析。
至此,我们得到一个结论,利用现代浏览器原生 ESM 的支持,实现开发阶段的 Dev Server,进行模块的按需加载,而不是先整体打包好后进行加载。相比 Webpack 这种必须打包再加载的传统构建模式,Vite 在开发阶段省略了耗时的打包过程,这也是它为什么快的一个重要原因。
生产环境构建
在生产环境中,Vite 基于 Rollup 进行打包,并采取一系列的打包优化手段。我们看看 package.json
中的构建命令
虽然 Vite 提供了开箱即用的 TypeScript 以及 JSX 的编译能力,但实际上底层并没有实现 TypeScript 的类型校验系统,因此需要借助tsc来完成类型校验,在打包前提早暴露出类型相关的问题,保证代码的健壮性。
接下来执行一下这个打包命令:
pnpm run build
执行 pnpm run build
之后,生成了最终的打包产物,我们可以通过pnpm run preview
命令预览一下打包产物的执行效果。
在浏览器中打开http://localhost:4173/ 可以看到和开发阶段一样的页面内容,证明我们成功完成 Vite + React 项目的生产环境构建。