Vite for Vue 是什么?
vite 是一个基于 Vue3 单文件组件的非打包开发服务器
这和传统基于打包(例如 Webpack)的开发服务器有什么区别
vite 在开发的时候没有打包的过程,ES 模块源码直接传输给浏览器,浏览器使用自带的 <script module>
进行解析支持,通过 HTTP 请求进行每次 import,开发服务器拦截请求和对需要转换的代码进行转换。
例如:*.vue
文件会在发回浏览器之前进行编译
这样操作有许多优势:
开发服务器启动后不需要进行打包操作,启动会变得非常迅速
代码在需要的时候进行编译,所以只有代码真正在屏幕上展现的时候才进行编译。开始开发的时候再也不需要等待整个应用编译完成,这对大型应用是一个巨大的改变
热模块替换的性能和模块的数量之间的关系解耦,热模块替换变得非常快
导入本地 ES 模块可能会引发深层的导入链路,整个页面重新加载会比依赖打包的开发服务器略慢。然而这是一个本地开发服务器,这部分增加的时间和实际编译的时间相比应该非常小(编译的文件会被缓存在内存中)
vite 的编译本质上还是的 Node.js 中进行,从技术上讲它可以支持打包工具能支持的各种代码转换,没有什么可以阻止你将代码包用于生产,实际上,vite 提供了vite build
的脚本用于这个操作,因此不会在生产环境中遭遇到网络流爆炸的问题
当前 vite 尚处于实验性阶段,不适合用于生产环境,但希望有一天能做到这个目标
特性
模块解析
本地 ES 模块导入不支持如下的导入方式
import { createApp } from 'vue'
默认情况下将会导致一个错误,vite 在 js 文件中检测到这种情况将会将其改写为@modules/{package-name}
,在这些特殊的路径下,vite 执行以下的方式找到正确的文件
vue
有特殊的处理,你不需要安装这个模块,如果需要使用特殊的版本,vite 将会使用node_modules
内部的模块包
如果
web_modules
目录存在,将会使用它
如果其它方式都没有定位到模块,将会在
node_modules
中查找
热模块替换
对于
*.vue
文件将会得到开箱即用的替换功能
对于
*.js
需要提供类似于 webpack HMR 的 API
CSS 预处理器
安装模块即可在 *.vue
中使用
生产构建
执行 vite build
,当前支持 --root
和 --cdn
两个参数
API
可以使用 API 定制开发服务器,vite 支持插件形式扩展,可以定制化访问 vite 内部的 koa 实例和增加相关的中间件
下一步开发计划
Source Map 支持
自动加载 postcss 配置
解析
启动一个 vite 开发服务器
http://localhost:3000/
首屏页面
http://localhost:3000/App.vue
主模板
/@hmr
更新逻辑
/App.vue?type=template
主模板 HTML 部分
/App.vue?type=style&index=0
主模板 css 部分,包括 scopedId
ws://localost:3000/
执行热替换的数据交互,与/@hmr
相联
Example:
type 与@hmr
的相关方法一致
vue-reload
vue-rerender
vue-style-update
vue-style-remove
js-update
full-reload
webpack 很慢
参考
版权声明: 本文为 InfoQ 作者【꯭🇫꯭】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f4a21825321023f241e0488a】。文章转载请联系作者。
评论