zoukankan      html  css  js  c++  java
  • Vite学习

    1. Vite简介(基于2.0.5版本)

    一种新的、更快地 web 开发工具,由 vue 作者尤雨溪开发,具有快速冷启动即时的模块热更新真正的按需编译,现在Star有21.4k:https://github.com/vitejs/vite
    Vite,基于浏览器原生 ES imports 的开发服务器。利用浏览器去解析 imports,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。同时不仅有 Vue 文件支持,还搞定了热更新,而且热更新的速度不会随着模块增多而变慢,生产环境用rollup,适用现在所有前端开发。
     
    Chrome >=61
    Firefox >=60
    Safari >=11
    Edge >=16
    默认情况下 Vite 只处理语法转译,并不默认包含任何 polyfill,

    2. Vite基本原理

    当声明一个 script 标签类型为 module 时,如
    //http://localhost:3000/src/main.js请求main.js文件:
    <script type="module" src="/src/main.js"></script>
    浏览器就会向服务器发起一个GET请求
    //main.js
    import { createApp } from 'vue'
    import App from './App.vue'
    import router from './router'
    
    const app=createApp(App)
    
    app.use(router)
    app.mount('#app')

    3. Vite项目搭建

    //Vite需要Node.js版本> = 12.0.0。
    $ npm init @vitejs/app
    然后可以选择预设的模版包括
    • vanilla
    • vue
    • vue-ts
    • react
    • react-ts
    • preact
    • preact-ts
    • lit-element
    • lit-element-ts
    你也可以在生成项目的时候直接指定项目名称和要使用的模版,例如我要搭建一个Vite+React+Ts的项目,可以运行:
    npm init @vitejs/app my-react-app -- --template react-ts

    生成的项目目录

    |____node_modules //模块
    |____src // 应用入口
    |____index.html // 页面入口
    |____vite.config.js // 配置文件
    |____package.json
    Vite 将index.html视为源代码和模块图谱的一部分,在开发期间 Vite 是一个服务器,而index.html是该应用的入口点,支持多个.html的多页面应用模式

    4. 更进一步

    4.1 Vite与webpack对比

     
    webpack
    Vite
    是否打包
     
    将应用各个模块集合在一起形成 bundle,为了在浏览器里加载各模块,使用map存放模块 id 和路径,使用__webpack_require__方法获取模块导出
    利用浏览器原生支持模块化导入,省略了对模块的组装,不需要生成 bundle,开发环境对源码无需打包
     
    打包工具
    使用node,常采用以下方式优化
    • tree shaking
    • happypack(多线程打包)
    • scope hoisting
     
    分为依赖源码两类,开发环境依赖用Go语言开发的Esbuild,比node快10-100倍,源码以原生 ESM 方式,生产环境用Rollup,因为Esbuild在代码分割和 CSS 处理方面还在开发中
    HMR通信
     
    开启webpack --watch选项,在webpack每次编译完更新文件,触发钩子,向sockjs发送新的message,使用websocket
    使用Node提供的fs.watch fs.watchFile 来监听文件的变化(chokidar),使用websocket
    HMR效率
     
    许多资源构成一个或者多个 bundle,遇到子模块更新,需要把该模块的相关依赖模块全部编译打包一次,
     
    让浏览器重新请求该模块即可,真正做到按需请求,HMR 是在原生 ESM 上执行的,利用 HTTP 头来加速整个页面的重新加载,依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,借助原生浏览器性能
     
    现状
    社区庞大,稳定,插件丰富,用户群体基数大
    社区刚起步,发展迅速,更新频率非常快,国内前端红人尤雨溪加持

    4.2 Esbuild打包效率

    4.3 工作流程

  • 相关阅读:
    hdu1316
    MVC中的ViewData、ViewBag和TempData
    linux下性能监控工具
    【翻译自mos文章】执行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误
    HTTP协议的消息头:Content-Type和Accept的作用 转载https://www.cnblogs.com/lexiaofei/p/7289436.html
    HTTP协议的消息头:Content-Type和Accept的作用
    JWT(JSON Web Token) 多网站的单点登录,放弃session 转载https://www.cnblogs.com/lexiaofei/p/7409846.html
    Http协议中get和post的区别
    常用的HTTP请求头与响应头
    浏览器获取自定义响应头response-headers
  • 原文地址:https://www.cnblogs.com/yuanzhiguo/p/14524784.html
Copyright © 2011-2022 走看看