最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 10分钟了解一下最近很火的Vite

    正文概述 掘金(alanyf)   2021-02-12   695

    贴一下作者微博原话:

    从上面可以看出:

    • Vite 主要对应的场景是开发模式,跳过打包按需加载,因此热更新的速度非常快;
    • 在大型项目上可以有效提高本地开发编译打包的速度,解决 “改一行代码等半天” 问题;
    • 浏览器解析 imports,利用了 type="module" 功能,然后拦截浏览器发出的 ES imports 请求并做相应处理;
    • 生产模式是用 rollup 打包,这里后续应该会做优化;

    一、现代浏览器的模块功能

    script标签的type属性设置为module,那么在js中就可以使用模块功能(import '**.js'),es6兼容性为IE11及以下不支持,从 Vue3 的 proxy 和 Vite 的模块,可以看出尤大是彻底放弃 IE 了。

    <script type="module" src="main.js"></script>
    
    <script type="module">
    import { a } from './a.js'
    </script>
    

    二、拦截http请求

    针对不同类型的文件做不同的处理

    1. js文件

    用 es-module-lexer 来对 js 进行的语法分析获取 imports 数组(依赖分析),然后将import语法替换为请求对应的js文件。

    原代码:

    <div id="app"></div>
    <script type="module">
    import { createApp } from 'vue'
    import App from './App.vue'
    
    createApp(App).mount('#app')
    </script>
    
    

    转换后:

    <div id="app"></div>
    <script type="module">
    import { createApp } from '/@modules/vue'
    import App from './App.vue'
    
    createApp(App).mount('#app')
    </script>
    
    

    2. vue文件

    vue单文件组件包含的三个部分 templatescriptstyle, Vite 会将单文件组件分成三个部分分别请求,以及做相应处理。

    2.1 template

    Vite 将 template 编译成 render 函数后返回。

    2.2 script

    分析 js 中的 import 依赖,重新发起请求。

    2.3 style

    将 style 编译成 css 插入head中。

    原本的 App.vue 文件是:

    <template>
      <h1>Hello Vite + Vue 3!</h1>
      <p>Edit ./App.vue to test hot module replacement (HMR).</p>
      <p>
        <span>Count is: {{ count }}</span>
        <button @click="count++">increment</button>
      </p>
    </template>
    
    <script>
    export default {
      data: () => ({ count: 0 }),
    }
    </script>
    
    <style scoped>
    h1 {
      color: #4fc08d;
    }
    
    h1, p {
      font-family: Arial, Helvetica, sans-serif;
    }
    </style>
    

    转换后变成了:

    // localhost:3000/App.vue
    import { updateStyle } from "/@hmr"
    
    // 抽出 script 逻辑
    const __script = {
      data: () => ({ count: 0 }),
    }
    
    // 将 style 拆分成 /App.vue?type=style 请求,由浏览器继续发起请求获取样式
    updateStyle("c44b8200-0", "/App.vue?type=style&index=0&t=1588490870523")
    __script.__scopeId = "data-v-c44b8200" // 样式的 scopeId
    
    // 将 template 拆分成 /App.vue?type=template 请求,由浏览器继续发起请求获取 render function
    import { render as __render } from "/App.vue?type=template&t=1588490870523&t=1588490870523"
    __script.render = __render // render 方法挂载,用于 createApp 时渲染
    __script.__hmrId = "/App.vue" // 记录 HMR 的 id,用于热更新
    __script.__file = "/XXX/web/vite-test/App.vue" // 记录文件的原始的路径,后续热更新能用到
    export default __script
    

    三、热更新

    Vite 的是通过 WebSocket 来实现热更新通信,当代码改动以后,通过 websocket 仅向浏览器推送改动的文件。

    因此 Vite 本地热更新的速度不会受项目的大小影响太多,在大型项目中本地开发速度快。

    Vite 的客户端热更新代码是在 app.vue 文件编译过程中,将代码注入进去的。

    四、Vite 和 vue-cli 的优缺点对比

    Vue CLI 优点Vue CLI 缺点
    经历过战斗考验,可靠开发服务器速度与依赖数量成反比与 Vue 2 兼容可以捆绑任何类型的依赖关系插件生态系统可以针对不同的目标进行构建
    Vite 优点Vite 缺点
    开发服务器比 Webpack 快 10-100 倍只能针对现代浏览器(ES2015+)将 code-splitting 作为优先事项与 CommonJS 模块不完全兼容处于测试阶段,仅支持 Vue 3最小的脚手架不包括 Vuex、路由器等不同的开发服务器与构建工具

    五、小结

    目前 Vite 正在以很快的速度迭代着,优化自身的功能,未来可期~

    六、参考

    • Vite 原理浅析
    • Vite和Vue CLI的优劣

    起源地下载网 » 10分钟了解一下最近很火的Vite

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元