vite搭建前端工程

vite简介

vite预构建

  • 将非 ESM 规范的代码转换为符合 ESM 规范的代码,另外就是将第三方依赖内部的多个文件合并为一个,减少 http 请求数量

  • 简单来说,vite在一开始将应用中的模块区分为依赖源码两类

  • 「依赖部分」更多指的是代码中使用到的第三方模块,比如 vue、lodash、react 等,vite 将会使用 esbuild 在应用启动时对于依赖部分进行预构建依赖

  • 「源码部分」 比如说平常我们书写的一个一个 js、jsx、vue等文件,这部分代码会在运行时被编译,并不会进行任何打包。vite 以 原生 ESM 方式提供源码

  • 在开发环境中vite是让浏览器接管了打包程序的部分工作,vite 只需要在浏览器请求源码时进行转换并按需提供源码。根据情景动态导入代码,即只在当前屏幕上实际使用时才会被处理

  • 在生产环境中,Vite利用Rollup对代码进行打包处理,并配合着tree-shaking/懒加载和chunk分割的方式为浏览器提供最后的代码资源

esbuild

  • Vite 是使用 Esbuild 来做预构建和内容转换的,同样规模的项目,使用 Esbuild 可以将打包速度提升10-100

  • Esbuild 是一款基于 Go 语言开发的 javascript 打包工具,最大的一个特征就是快

  • Esbuild支持多种模块格式,包括 CommonJSES6 模块、AMD等,使得它适用于任何类型的JavaScript项目

缓存

  • 在Vite中,缓存是一个重要的概念,因为它可以显著加快开发服务器的热重载速度

  • Vite使用了两级缓存:一级是内存中的模块缓存,二级是基于文件系统的缓存

  • 内存中的模块缓存:Vite会将每个模块的转换结果保存在内存中,以便在开发过程中快速访问

  • 基于文件系统的缓存:Vite会将经过转换的文件存储在node_modules/.vite/文件夹中,并且会在文件系统中缓存这些文件的依赖和变化

  • package.json中的dependencies列表;包管理器的package-lock.json文件;vite.config.js相关字段中的配置;当以上三个地方发生变化时,vite均会进行重新预购构建

  • 更改缓存文件的位置

    // vite.config.js
    export default defineConfig({
    cacheDir: ‘./.cache’
    })

模块热重载HMR

  • HMR 的全称叫做 Hot Module Replacement,即 模块热替换 或者 模块热更新
  • HMR 的作用就是在页面模块更新的时候,直接把页面中发生变化的模块替换为新的模块,同时不会影响其它模块的正常运作
  • Vite本身也实现了一套 HMR 系统,他是基于原生的 ESM 模块规范来实现,在文件发生改变时 Vite 会侦测到相应 ES 模块的变化,从而触发相应的 API,实现局部的更新
  • Vite 通过 import.meta.hot 对象暴露手动 HMR API

vite基础配置

配置文件

  • Vite 会自动解析项目根目录下名为 vite.config.js 的配置文件(也支持其他 JS 和 TS 扩展名)

  • 最基础的配置,vite.config.js

    export default {
    // 配置选项
    }

  • 显式地通过 --config 命令行选项指定一个配置文件

    vite --config my-config.js

  • 可以使用 defineConfig 工具函数配合开发工具进行智能提示

    import { defineConfig } from ‘vite’

    export default defineConfig({

    })

vite-plugin-html

  • vite内置了非常多的插件,开发者无需关注过多的插件配置

  • vite-plugin-html 是一个基于ejs模板库动态控制整个html文件内容的一个插件

  • 插件安装

    npm install vite-plugin-html -D

  • vite.config.js添加配置

    import { CreateHtmlPlugin } from ‘vite-plugin-html’

    plugins: [
    createHtmlPlugin({
    minify: true, // 是否压缩代码
    pages: [
    { // 进行多页面打包配置
    filename: “index.html”, // 生成的文件名称
    template: “./index.html”, // 模板文件
    entry: “./src/main.js”, // 打包入口文件
    injectOptions: { // 注入页面信息
    data: {
    title: “vite项目练习”,
    }
    }
    }
    ]
    }),
    ]

  • 在h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【编译器】传统编译器和AI/ML编译器总结

前言 本文总结了传统编译器和AI/ML编译器,可作为学习、研究、研发的参考资料。 1.编译器-GC Clang Clang是一个C、C、Objective-C和Objective-C编程语言的编译器前端。它采用了LLVM作为其后端,由LLVM2.6开始,一起发布新版本。它的目标是提供一…

使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书

进入nginx docker,一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…

IMUX6LL嵌入式-Linux开发中的头文件汇总介绍

sys/mman.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/types.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 sys/stat.h 详见 https://blog.csdn.net/wenhao_ir/article/details/144487608 unistd.h 详见 https://blog…

spring boot框架优劣势分析

优势(Advantages): 1. 快速开发(Rapid Development): • Spring Boot通过提供大量的默认配置和自动配置功能,极大地减少了开发过程中的配置工作量,从而加快了开发速度。 2. 简化部署&#xff08…

【设计模式】如何用C++实现观察者模式【发布订阅机制】

【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式,深刻体会到优秀的设计模式不仅能显著降低后续维护的压力,还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…

企业架构划分探讨:业务架构与IT架构的利与弊

在企业架构(EA)的江湖里,大家一直致力于如何把企业的复杂性简化成有条有理的架构蓝图。有人选择把企业架构分成业务架构和IT架构,而IT架构又进一步细分为应用架构、数据架构和技术架构。但一提到这种划分方式,总有人跳…

QT:在线安装与离线安装

QT 学习系列 QT:在线安装与离线安装 QT 学习系列一、安装(一)离线安装windows系统Linux 系统Mac 系统 (二)在线安装 二、 环境变量配置三、验证总结 一、安装 (一)离线安装 windows系统 获取…

FFmpeg功能使用

步骤:1,安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev;如下图 会跳到另外的下载界面: 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip: 即可下载到FFmpeg; 使用&#…

ARM/Linux嵌入式面经(五六):科华数据

经典3分钟自我介绍,然后有两个面试官,第一个面试官偏基础八股, 文章目录 1、c++11和17的主要区别C++11的新特性C++17的新特性及与C++11的区别面试官追问及回答2、stl中使用的比较多的容器3、map的底层实现数据结构问题回答面试官追问及回答4、有没有使用过其他的数据结构5、…

etcd集群常见日志

1、节点失去领导者 {"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 9afce9447872453 lost le…

【Python网络爬虫笔记】11- Xpath精准定位元素

目录 一、Xpath 在 Python 网络爬虫中的作用(一)精准定位元素(二)应对动态网页(三)数据结构化提取 二、Xpath 的常用方法(一)节点选取(二)谓词筛选&#xff0…

Vue 学习-基础

1 声明式渲染 能在改变时触发更新的状态被称作是响应式的。我们可以使用 Vue 的 reactive() API 来声明响应式状态。reactive() 只适用于对象 (包括数组和内置类型,如 Map 和 Set)。而另一个 API ref() 则可以接受任何值类型。ref 会返回一个包裹对象,并…

24. 生成器

一、什么是生成器 利用迭代器,我们可以每次迭代获取数据(通过 next() 方法)时按照特定的规律进行生成。但是在实现一个迭代器时,关于当前迭代的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录…

软件测试等级说明

Level 0 (冒烟测试-Smoke Test):位于最顶部,是所有测试的基础,用来快速验证新构建是否稳定。Level 1 (基本功能测试):在冒烟测试之下,它比冒烟测试更深入,确保主要功能按预期工作。Level 2 (集成测试)&…

【Hadoop】-- hadoop3.x default port

Hadoop 3.x 修改了一些以前常用的默认端口,完整的默认端口列表,可点击下面配置文件获取信息: core-default.xmlhdfs-default.xmlhdfs-rbf-default.xmlyarn-default.xml

【go语言】regexp包,正则表达式

Go语言 regexp 包详解 Go 语言的 regexp 包提供了对正则表达式的支持。 正则表达式(regex)是一种字符串搜索模式,用来检查一个字符串是否符合某种特定的模式,或从中提取符合某种模式的子字符串。 1. regexp 包概述 regexp 包支…

【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园

目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案教程相关教程使用的平台 步骤信息管理 这里记录的自己搭建数字花园(在线个人知识库)的经历,首先尝试的是网上普遍使用的方法,也就是本篇文章介绍的。 后面会继续…

《探秘开源气味数据库:数字世界里的“气味宝藏”》

《探秘开源气味数据库:数字世界里的“气味宝藏”》 一、开源气味数据库的兴起背景(一)技术发展的推动(二)市场需求的催生 二、常见的开源气味数据库介绍(一)GS-LF 香精香料数据库(二…

【0x000C】HCI_Link_Key_Request_Negative_Reply 命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Link_Key_Request_Negative_Reply命令格式 2.2. BD_ADDR 三、返回事件及参数 3.1. 生成的事件 3.2. BD_ADDR 2.3. Status 四、命令执行流程场景 4.1. 命令触发条件 4.2. 命令组装与发送 4.3. 控制器接收与处理 …

C#里怎么样删除字典里多项元素?

当我们使用字典比较多的情况,一般来说,就是为了提高查询的速度。 比如一个服务器,有多个TCP连接上来,每次要通过IP地址来访问这些连接对象, 就需要查找。 如果采用列表来保存,就只能遍历来查询到连接对象。 如果采用字典,就可以快速地通过字典键来查询到对象,其实这…