You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{toDisplayStringas_toDisplayString,createVNodeas_createVNode,createTextVNodeas_createTextVNode,Fragmentas_Fragment,openBlockas_openBlock,createBlockas_createBlock}from"/@modules/vue.js"const_hoisted_1=/*#__PURE__*/_createVNode("p",null,"string1",-1/* HOISTED */)const_hoisted_2=/*#__PURE__*/_createVNode("p",null,[/*#__PURE__*/_createTextVNode("Edit "),/*#__PURE__*/_createVNode("code",null,"components/HelloWorld.vue"),/*#__PURE__*/_createTextVNode(" to test hot module replacement.")],-1/* HOISTED */)exportfunctionrender(_ctx,_cache,$props,$setup,$data,$options){return(_openBlock(),_createBlock(_Fragment,null,[_createVNode("h1",null,_toDisplayString($props.msg),1/* TEXT */),_createVNode("button",{onClick: _cache[1]||(_cache[1]=$event=>($data.count++))},"count is: "+_toDisplayString($data.count),1/* TEXT */),_hoisted_1,_createVNode("p",null,_toDisplayString($data.string),1/* TEXT */),_hoisted_2],64/* STABLE_FRAGMENT */))}
JSON 文件格式处理
通过 rollup-pluginutils 的dataToEsm方法
{
custom: 'data',to: ['treeshake']
}
转变为:
exportconstcustom='data';exportconstto=['treeshake'];exportdefault{ custom, to };
参考文章
背景
Vite是一个构建工具,旨在为现代web项目提供更快、更精简的开发体验。
vite主要分两个模块:
vite 和 webpack 开发环境最大的区别就是vite 在开发环境抛弃了打包这一个理念,直接在开发环境使用Javascript module,减少打包带来的时间损耗,极大地方便了本地开发。
对于vite的学习,我主要总结了以下四个模块进行总结。
模块路径解析
对于一个native es module服务系统而言,不同模块的路径解析非常重要,这里面有以下几个问题:
vite的解决方式:
不同格式文件处理
通过不同格式的处理,我们可以理解类似于webpack loader对于不同文件是如何处理的, 了解vite工作机制。
对于不同格式的文件,vite统一都处理成javascript格式,在返回的response 中添加
Content-Type: application/javascript; charset=utf-8
vue:
vue 的组件是一个单文件组件的机制。一个vue组件的定义基本分三个部分:
编译器会将一个vue组件的三部分分别处理。在vite中,请求一个组件的资源:
Helloworld.vue script 逻辑部分编译:
HelloWorld.vue?type=style 样式部分编译:
HelloWorld.vue?type=template 结构部分编译:
JSON 文件格式处理
通过 rollup-pluginutils 的dataToEsm方法
转变为:
CSS 文件格式处理
其实在vue的样式部分已经有所涉及。
其中 updateStyle 是更新样式的关键函数,我们进行分析:
vite利用** CSSStyleSheet **代表一个样式表,利用javascript的接口编辑或者添加相关的样式。
当然还有一个特殊的情况就是css文件中有@import 等操作, 这种特殊的情况,vite直接使用style标签进行样式插入。
热更新
vite1 代码较少,这可以让我们低成本的学习一个开发环境热更新的具体细节
其中第四部处理不同文件的方式,列在了下方:
预打包
vite的预打包优化手段其实和小程序页面预加载技术,以及网页的prefetch,preload等的原理是基本一致的,当我们尽量少的打包过后,那么预打包那些没有处理的文件就是优化的手段之一。
vite 会去分析package.json 当中的依赖项,会将依赖进行打包并缓存:
其中lodash较为特殊,因为其文件众多,如果不进行预打包的话,开发项目将会请求很多相关文件,造成网页reload时性能衰减。所以vite预打包的另外一个重要的功能就是通过rollup或者esbuild(vite 不同版本实现不同),将过于零散的文件打包,减少网络请求,提高页面reload性能。
The text was updated successfully, but these errors were encountered: