快速开始
启动项目
shell
npm create vite说明
npm create vite实际调用的是create-vitenpm create是npm init的别名npm init <initializer>相当于npm exec <create-initializer>- 这里
create是固定前缀 - npm init @scope/init -> npm init @scope/create-init
- npm init @scope -> npm init @scope/create
- 这里
特点介绍
- 冷启动:无 bundle + esbuild 预构建
- 模块热更新
- 真实按需加载
原理介绍
vite 对应用中的模块区分为 依赖(需要预构建) 和 源码(加载时转换),并基于 ESM 进行模块加载
- 预构建:服务启动后会对
node_modules内容进行预编译(基于 esbuild, 速度极快),以提高加载效率- 对依赖模块统一化处理,转换为 ESM (兼容 CommonJS 和 UMD)
- 对多个子模块进行合并,减少请求数(如 lodash)
- 预编译后,对应文件将缓存在
node_modules/.vite/下 - 只有当 package.json 依赖和 lockfile 依赖调整时才会重新预构建
- 若存在本地依赖包,需要删除 node_modules/.vite/ 文件夹或使用 vite --force 启动开发服务器
- 加载流程:利用
<script type="module" src="xxx" />实现按需模块化加载- 浏览器在加载入口文件后,遇到内部 import 引入的包,则会发起对应的 HTTP 请求,
- vite 会启动 koa 服务拦截对应地址的请求
- 服务端对源码资源处理转换后再以 ESM 格式返回给浏览器
- 热更新:监听文件系统变更(使用
chokidar)并通知浏览器- 通过 websocket 建立浏览器与服务器的通信
- 本地服务监听文件的修改
- 文件修改时服务器通知浏览器进行对应的更新
补充说明:生产环境使用 rollup 进行打包
- esbuild 对 css 和 code split 不友好
- rollup 生态更加成熟且灵活
- 生产环境构建对速度要求一般