首页 > 其他分享 >vite

vite

时间:2023-09-04 13:58:03浏览次数:39  
标签:浏览器 vite 模块 import 打包 加载

vite的原理

ES Modules

vite的成功得益于现代浏览器对于基于ECMAScript 标准原生模块系统(ES Modules)实现。 目前主流浏览器(IE11除外)都已经支持。他允许我们在浏览器使用export、import 的方式导入和导出模块,在 script 标签里设置 type="module"

<script type="module">
  import { createApp } from './main.js‘
  createApp()
</script>

浏览器会识别添加type="module"的 <script> 元素,浏览器会把这段内联 script 或者外链 script 认为是 ECMAScript 模块。然后浏览器会被这里面的import引用发起一个http请求,请求获取文件中的内容。 因此我们对于第三方的模块,可以不用打包合并,而是通过import 这种方式去发起http 请求,获取代码。这也是vite的主要实现思路。 如果你对ES Modules 不够了解。可以去看看ES Modules的规范

vite的工作流和冷启动
  1. 首先是启动一个静态资源服务器
  2. 找到项目的入口,开始加载入口文件
  3. 当声明一个 script 标签类型为 module 时,浏览器就会像服务器发起一个GET
  4. Vite 通过劫持浏览器劫持浏览器劫持浏览器的这些请求,并在后端进行相应的处理,将项目中使用的文件通过简单的分解与整合,然后再返回给浏览器。

从上面的分析可知: vite主要做了以下事情:

    1. 启动了一个静态资源服务器
    1. 只需要在浏览器请求源码时进行转换并按需提供源码 vite整个过程中没有对文件进行打包编译,至于其他加载的工作就交给了浏览器,所以其运行速度比原始的webpack开发编译速度快出许多。
vite的热更新

传统打包器是将项目打包之后的资源存入电脑的内存之中,这样他们只需要在文件更改的时候,将对应的模块进行失活,但是它仍然需要重新构建并重载页面。 所以像webpack这类的打包工具支持了动态模块热重载(HMR),允许一个模块替换自己,而对其余页面没有影响。但是在实践中。我们发现HMR的速度会随着项目的增大而降低(原因在 目前打包工具的困境 这一节已经分析过了)

而在vite中HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小。

vite的按需加载

为什么说vite才是真正的按需加载呢?难道webpack不是真正的按需加载吗?
如果你想知道,那么你可以看看去看看webpack的原理,这里我简单介绍一下 webpack其实在开始构建打包的时候,还是对所有的文件进行一次打包构建,只是在webpack遇到 import( * ) 这种语法的时候,会另外生成一个chunk; 只有在合适的时候去加载import中的内容
从上面的分析可以知道。不管我们这段import的代码何时执行,我们对需要对它进行一定的打包

但是vite不一样,只有在你真正的需要加载的时候,浏览器才会发送import请求,去请求文件中的内容,所以才说vite才是真正的按需加载

标签:浏览器,vite,模块,import,打包,加载
From: https://www.cnblogs.com/DQ-MINE/p/17676810.html

相关文章

  • 手把手教你vue3-ts-uniapp-vite创建多端小程序-3 统一ui,uni-ui库
    uni-ui官网地址https://uniapp.dcloud.net.cn/component/uniui/quickstart.html1.安装sass、sass-loadernpminstallsass-Dnpminstallsass-loader-D2.安装uni-uinpminstall@dcloudio/uni-ui3.配置easycom。在pages.json中配置"easycom":{"autoscan&q......
  • 手把手教你vue3-ts-uniapp-vite创建多端小程序-2 设置底部导航
    1.打开项目,打开pages.json,设置底部导航栏。注意pages中的path和tabBar中list中的path要一致{ "pages":[ { "path":"pages/index/index", "style":{ "navigationBarTitleText":"首页" } },{ "pa......
  • 解决vite-plugin-mock: if (!require.cache) { ^ ReferenceError: require is not
    项目中:  "mockjs":"^1.1.0",  "vite-plugin-mock":"^3.0.0",运行报错:file:///C:/Users/jkf9941/Desktop/study/vue3Mange/node_modules/vite-plugin-mock/dist/index.mjs:128 if(!require.cache){ReferenceError:requireisno......
  • vue3 + vite 动态引入不被打包的静态资源
    在开发中,通常会把一些静态资源放在assets文件夹下,但是assets目录下的内容是需要vite编译打包的,所以如果只是引用assets目录下的资源时,使用绝对路径、相对路径均可。但是,在开发中,我们经常会引用一些不被打包的资源,此时该资源是放在public目录下的,那么在引用时,路径的写法如下:不......
  • vite不支持@怎么办?
    import{defineConfig}from'vite';importvuefrom'@vitejs/plugin-vue';constpath=require('path');exportdefaultdefineConfig({plugins:[vue()],define:{'process.env':{},},resolve:{......
  • require在vite不能用的问题(做手机短信弄滑块验证时候碰到)
    第一步:yarnadd-Dvite-plugin-require-transform或  npm ivite-plugin-require-transform --save-dev第二步:在vite.config.js中配置import{defineConfig}from'vite'importrequireTransformfrom'vite-plugin-require-transform';exportdefault......
  • 使用 Vitest 进行组件测试
    原文:试试使用Vitest进行组件测试,确实很香。参考:Vitest:https://cn.vitest.dev/guide/ui.html什么是Vitest?自从尤大的构建工具Vite获得了巨大的人气,现在有了一个由它驱动的极快的单元测试框架。Vitest。Vitest与Jest兼容,具有开箱即用的ESM、Typescript和JSX支持,并且......
  • Electron,VUEJS3,Vite,TypesSript 开发环境配置
    Electron,VUEJS3,Vite,TypesSript开发环境配置项目早期是vue3+vite开发的,后期由于运营需求,要修改为Win安装包。方案还是比较多的:1.WPF-Webview由于目前只需要兼容win,所以可以选择WPF,但WPF需要WebView的,还需要本地架设服务。整体部署比较复杂以及需要熟悉C#与WPF相关开发。2.......
  • 为什么vite比webpack速度快
    一.webpack为什么慢主要是由于其内部的核心机制——bundle模式引发的webpack通过bundle机制,将项目中各种类型的源文件转化供浏览器识别的js、css、img等文件,建立源文件之间的依赖关系,将数量庞大的源文件合并为少量的几个输出文件。bundle工作机制的核心部分分为两块:构建......
  • Vite + Vue3 + Element-Plus
    搭建Vite项目注意Vite需要 Node.js 版本14.18+,16+。然而,有些模板需要依赖更高的Node版本才能正常运行,当你的包管理器发出警告时,请注意升级你的Node版本。使用NPM: npmcreatevite@latest使用Yarn:yarncreatevite使用PNPM:pnpmcreatevite输入项......