【vite】-【vite介绍】-【vite的基础应用】-【vite的高级应用】-【

news2024/12/26 13:20:56

目录

  • vite介绍
  • vite的基础应用
    • vite创建项目
      • vite创建vue3项目
      • vite创建vue2项目
      • vite创建react项目
    • vite中使用css的各种功能
    • vite中使用ts
    • vite中处理静态资源的方法
    • vite集成eslint和prettier
    • vite中的env环境变量
  • vite的高级应用

vite介绍

一、特点:

  1. 开发时效率极高
  2. 开箱即用,功能完备
  3. 摄取丰富,兼容rollup
  4. 超高速热重载
  5. 预设应用和类库打包模块
  6. 前端类库无关

二、vite是构建工具的高阶封装,内部使用的是其他的工具,最核心的是rollup
三、vite的目标:

  1. 使用简单:配置项少,把能封装的配置都封装好了,不会让你非常深度的接触一些配置;内部集成devServe,不需要像使用web pack那样再加入devServe再配置再使用;
  2. 快:得益于他的底层架构设计
  3. 便于扩展:兼容rollup插件rollup比webpack发布早,使用率高,社区成熟,插件多

四、和传统构建工具的区别:high level api;不包含自己编译能力(vite底层的编译能力源自rollup、esbuild,vite本身不参与编译,他只是集成了rollup的功能,启动了deserve,vite帮我们做一个串联,去管理模块的图谱,监听文件的更新来进行推送);完全基于esm加载方式的开发式

  1. webpack:他希望他可以把所有能考虑的东西都考虑进去,同时他希望他的核心功能能够帮助其他的功能实现,比如可以通过webpack实现webpack dev serve
  2. rollup:诞生就是为了build esm的module,同时他专注于build javascript,而不考虑平台

webpack编译出来的代码中会有很多webpack的工具函数,来帮助我们加载模块,比如在浏览器中我们要import另外的模块,我们通过script标签引入这个js,然后在js加载完后执行回调函数来将模块加载完成,webpack提供了各种帮助函数来帮助我们做这个事,但rollup不会有自己专有的函数,他遵循esm标准,他build出来的代码符合commonjs、umd标准,这是因为rollup更多是为了让工具类库来使用,他的初衷不是为前端项目服务。而vite的目标是工程,是项目开发,而webpack和rollup他们是工具,他们想执行的是构建,vite更上层,更high level
vite是为项目而生,不是为构建而生,他减少了很多配置量,主要减少在于:

  1. dev server:如果使用webpack配置一个项目,一定要配置dev serve,但是通过vite的命令生成的项目会自动集成dev serve,或者说vite的核心就是dev serve,vite中很大一部分是dev serve
  2. 各类loader:在webpack中需要配置css-loader、post-css-loader、ts-loader等,而vite已经通过插件的形式内置了这些内容,开箱即用
  3. build命令:内置了build命令,通过vite build可以build类库,也可以build项目,对于webpack而言需要自己写命令,开发时的配置和生产的配置可能又不一样,又需要做一些处理

五、vite优势:上手简单、开发效率高、社区成本低(兼容rollup插件)、没有复杂晦涩的配置
六、

vite的基础应用

vite创建项目

vite创建vue3项目

vite创建vue2项目

vite创建react项目

vite中使用css的各种功能

一、推荐使用css variable:简单来说就是在css文件中可以进行变量定义
请添加图片描述
:root代表命名空间,在:root下定义的所有变量在所有选择器中都可以使用,也可以对某一类标签进行样式的定义,那这些样式就只能在某一类标签中使用
二、postcss:vite已集成postcss,如果想用的话,新建postcss.config.js,在里面声明要用的postcss
请添加图片描述
该postcss用于在编译css文件时进行输出:
请添加图片描述
三、@import alias:引入文件时,通过@指向某个目录,在vite.config.js中进行如下配置:
请添加图片描述
在css中的import也可以使用:@import url("@styles/other.css")
四、css-modules:如果希望css的类名不根据我们写的类名,而是根据映射关系进行编译,这样类名就变成了无意义的,并且可以作为一个可以收缩的字符串,同时可以进行去重,对应到vite中,只用在创建css时,文件名写:css文件名.module.css
请添加图片描述
使用时:

<script>import classes from "@style/test.module.css";</script>
<div class={`${classes.moduleClass}`}>hello world</div>

五、css预处理器:安装yarn add less即可使用
请添加图片描述

vite中使用ts

一、vite天生支持ts,因为vite使用esbuild,esbuild支持ts语法,值得注意的是,vite值编译,不做校验,也就是说,他只是把ts语法编译成js,让其可在浏览器中运行,但他不会做ts校验,如果需要校验,需要手动使用tsc --noEmit来校验语法但不输出,如果是在vue项目中,应该写:"build": "vue-tsc --noEmit && tsc --noEmit && vite build(记得先yarn add vue-tsc
请添加图片描述

VScode支持ts语法校验,所以就算你写错了,VScode会给你标出来,可以不用

二、isolatedModules:

  1. vite提供的ts编译只针对单文件的语法编译,而ts是可以关联不同文件之间的模块信息,比如a文件export了一个类型,在b文件import了这个类型是可以直接用的,但是vite编译ts的时候不会读其他文件的相关信息,就会导致一些ts的功能无法使用。在tsconfig.js中配置:"isolatedModules": true用于告诉ts当前环境不支持模块间关联的类型校验的,在开发时就会得到vite编译时的错误提醒
    请添加图片描述
  2. ts中,对于const enum会在使用时直接替换成常量,也就是说,编译出来的js中,第10行代码应为:age: 0,而对于vite的esbuild提供ts语法编译,他不认识const enum这种语法,编译时会直接去掉,也就是说,编译出来的js中,第3-6行代码直接没有了,但是第10行还在使用,所以第10行会报错。配置了"isolatedModules": true,在开发时就会得到vite编译时的错误提醒
    请添加图片描述
  3. 文件必须有模块相关的代码:配置了"isolatedModules": true后,ts强制要求我们在每个文件中做export或import

三、client types:

  1. vite提供了很多内置对象,内置对象又有很多作用,比如可以通过import.meta.来引用环境变量等,这就需要ts认识meta类型, 在tsconfig.js中配置:"types": ["vite/client"]即可使用vite的内置对象
    请添加图片描述
    在ts中使用:
    请添加图片描述
  2. ts不认识png文件,配置了"types": ["vite/client"]之后,ts知道这是png文件,也知道import pngUrl from "./assets/logo.png"返回的是个字符串,在项目中可以直接使用

vite中处理静态资源的方法

一、直接使用import导入,然后使用
请添加图片描述
二、vite提供了几个参数让我们更方便的引入文件:

  1. url:把文件放在某个地方,然后返回个url
    请添加图片描述
    用法:在引入的文件后面加?url
    输出:/src/test.ts
  2. raw:返回图片的字符串内容
    用法:在引入的文件后面加?raw
    输出:把文件的内容作为字符串输出
    请添加图片描述
  3. worker/worker inline:用于web worker(帮助我们更高性能的构建应用的工具),javascript是单线程的,如果将计算量很大的代码和javascript渲染进程放在一起,可能会阻塞渲染,导致页面卡顿,如果有个新的线程来处理这些计算的任务,那么在计算的同时,也不影响页面的渲染,web worker就是用来做这个事
    请添加图片描述
    用法:在引入的文件后面加?worker
    worker.js里存放的就是计算量很大的代码,web worker与主线程通过onmessage通信

三、json:

  1. 引入json直接用:
import pkg from "../package.json"
console.log(pkg)// 输出json文件的内容
  1. 引入json的部分内容:
import {version} from "../package.json"
console.log(version)// 输出version的值 0.0.0

四、web assembly:在浏览器中可运行的二进制的内容,在vite中也可以直接import然后后使用,省去了注册、转换、引入等步骤

import init from "./fib.wasm"
init().then((m) => {
	console.log(m.fib(10))
})

vite集成eslint和prettier

一、eslint规范代码的书写习惯,prettier自动做格式化
二、eslint

  1. 安装:yarn add eslint-config-standard eslint-plugin-import eslint-plugin-promise eslint-plugin-node -D
  2. 在根目录下新建eslint的配置文件.eslintrc.js,在其中声明使用什么规则:
module.exports = {
	extends:"standard"
}

如果写的代码不符合规则(比如standard要求使用’'),在开发时就会给你报错,prettier可以帮助我们将规则自动使用到代码中,在保存时就进行格式化
三、prettier

  1. 在vscode中安装prettier插件,并配置在什么时候执行format
    请添加图片描述
  2. 在根目录下新建prettier的配置文件.prettiertrc.js,在里面声明格式化的内容
{
	"semi":false,// 不需要分号
	"singleQuote":true// 使用单引号
}
  1. 点击vscode的code——setting,搜索format on save,打开保存时格式化
    请添加图片描述
  2. 继续搜索formatter,选择默认使用prettier格式化
    请添加图片描述
    四、在package.js中的script中新增"lint": "eslint --ext js src/",以后执行命令npm run lint就可以验证src下所有的代码是否符合eslint的规则
    五、当eslint和prettier冲突时,可以关掉eslint的某项规则,在eslint的配置文件.eslintrc.js中:
module.exports = {
	extends:"standard",
	rules:{
		'space-before-function-paren': 'off'// 关掉这个规则
	}
}

六、先执行eslint检查再打包文件,在package.js中的script中build值的开头新增"buile": "npm run lint && "
七、执行git commit或者git push之前执行eslint检查,检查不通过则不允许提交,使用husky工具:

  1. yarn add husky -D
  2. npx husky install
  3. npx husky add .husky/precommit "npm run lint":在执行commit之前执行npm run lint

vite中的env环境变量

一、通过import.meta.env可查看vite默认存在4个环境变量:

  1. MODE:指明现在处于的模式,一般用他来对不同环境进行区分,比如dev,test
  2. BASE_URL:请求静态资源初始的URL,比如本地调试的localhost:3000,在线上可能是某个具体的域名
  3. PROD:当前环境是否是正式环境
  4. DEV:当前环境是否是dev,与prod互斥
  5. SSR:是否是服务端渲染的环境

二、production replacement:正式环境不能通过import.meta.env获取对象,如果PROD为true,那么编译后的文件import.meta.env会被替换为一个值,比如import.meta.env.MODE会被编译为"production"一个字符串值
三、自定义env:在src文件夹下新建.env文件,来声明一些自定义env:

VITE_TITLE=HELLO

使用:import.meta.env.VITE_TITLE,在import.meta.env也可以看到有这个VITE_TITLE
四、vite中有一个环境变量的工具,他会读各种不同的变量,然后将其放在环境变量里面,他还会根据文件名来区分不同的环境变量,比如在src文件夹下新建.env.development文件:

VITE_aaa=xxx

.env根据不同环境有不同的后缀,开发环境会用到.development文件,即运行npm run dev时会自动读取.env.development文件
五、mode:在指令中可以通过–mode xxx来指定当前环境
请添加图片描述
他会自动读取.env.test文件的内容
六、在使用自定义的env时,发现类型和vite内置的不一致,并且在写代码时,不会给我们提示,可以在vite-env.d.ts中做如下声明:
请添加图片描述

vite的高级应用

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

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

相关文章

华为ICT七力助推文化产业新质生产力发展

创新起主导作用的新质生产力由新劳动者、新劳动对象、新劳动工具、新基础设施等四大要素共同构成&#xff0c;符合新发展理念的先进生产力质态&#xff1b;具有高科技、高能效、高质量等三大突出特征。而通过壮大新产业、打造新模式、激发新动能&#xff0c;新质生产力能够摆脱…

QT 使用QMediaPlayer实现的简易视频播放器

文章目录 效果图功能点类介绍代码介绍总结 QT 使用QMediaPlayer实现的简易视频播放器 效果图 功能点 播放指定视频全屏/退出全屏开始/暂停/重置视频拖拽到指定位置播放 类介绍 需要在配置文件中加入Multimedia, MultimediaWidgets这俩个库。Multimedia&#xff1a;提供了一套…

【Qt 学习笔记】Qt 中出现乱码的解释及讨论

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt 中出现乱码的解释及讨论 文章编号&#xff1a;Qt 学习笔记 / 06 文…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

一种有效的隐私保护联邦学习方法-文章翻译

一种有效的隐私保护联邦学习方法 摘要 联邦学习已成为协作学习和隐私保护学习的一种很有前途的方法。联合学习过程中的参和者通过交换模型参数而不是实际的训练数据(他们可能希望保持私有)来合作训练模型。然而,参数交互和生成的模型仍然可能会披露有关所用训练数据的信息…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 &#xff08;1&#xff09;关于CPU &#xff08;2&#xff09;关于内…

在线监测系统在水厂水质管理工程中的应用与研究

【摘要】&#xff1a;随着水厂水质管理技术和管理水平的提升&#xff0c;达到了在线监测系统通过监测数据的反馈&#xff0c;及时发现问题&#xff0c;快速处理事故&#xff0c;优化了水资源的利用率&#xff0c;提高了供水系统的稳定性和安全性&#xff0c;从而有效地提高供水…

2024.4.4-day09-CSS 布局模型(标准流模型、浮动模型)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.4-学习笔记1 CSS 布局模型1.1 标准流1.2 CSS 浮动1.3 去除塌陷 2…

RabbitMQ的交换机与队列

一、流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff08;后面会详细讲&am…

文件读写(相关函数详解)

1.文件的顺序读写 相关函数&#xff1a; 1.1 fputc函数 fputc的参数如下 它的功能是把字符character输出到stream指向的文件中&#xff0c;字符的本质就是它的ascll值所以这里用int类型接收。如果写入成功则返回写入的字符的ascll码&#xff0c;失败则返回-1(即EOF) 示例代码…

【洛谷】P9236 [蓝桥杯 2023 省 A] 异或和之和

题目链接 P9236 [蓝桥杯 2023 省 A] 异或和之和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 1. 暴力求解 直接枚举出所有子数组&#xff0c;求每个子数组的异或和&#xff0c;再对所有的异或和求和 枚举所有子数组的时间复杂度为O&#xff08;N^2&#xff09;&…

C++ 【原型模式】

简单介绍 原型模式是一种创建型设计模式 | 它使你能够复制已有对象&#xff0c;客户端不需要知道要复制的对象是哪个类的实例&#xff0c;只需通过原型工厂获取该对象的副本。 以后需要更改具体的类或添加新的原型类&#xff0c;客户端代码无需改变&#xff0c;只需修改原型工…

线程安全--深入探究线程等待机制和死锁问题

꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转…

影院座位选择简易实现(uniapp)

界面展示 主要使用到uniap中的movable-area&#xff0c;和movable-view组件实现。 代码逻辑分析 1、使用movable-area和movea-view组件&#xff0c;用于座位展示 <div class"ui-seat__box"><movable-area class"ui-movableArea"><movab…

C++ 内存分配时地址对齐

如果数据地址的对齐与CPU相兼容&#xff0c;那么CPU读写内存时性能会更高。 因此在C中&#xff0c;有时会希望在堆或栈中分配内存时&#xff0c;返回的地址能按照特定的长度对齐。 如果希望在栈中分配的内存时&#xff0c;返回地址按照特定长度对齐&#xff0c;可以使用 alig…

IVS模型解释

核心思路 【Implied volatility surface predictability: The case of commodity markets】 半参数化模型&#xff1a;利用各种参数(或者因子)对隐含波动率进行降维&#xff08;静态参数化因子模型&#xff09;&#xff0c;对参数化因子的时间序列进行间接的建模 基于非对称…

蓝桥杯 十一届C++A组 字符排序 21分(运行超时)

思路&#xff1a; 1. 此题考查的冒泡排序中的交换次数&#xff0c;其实就是考察当前数与后面的逆序对个数问题。而为了最大利用位数&#xff0c;应当使每一位都不小于后面的字符&#xff0c;否则会造成一次逆序对的浪费&#xff08;贪心&#xff0c;为了使总位数最少&#xff…

代码随想录算法训练营三刷 day45 | 动态规划 之 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

三刷day45 70. 爬楼梯 &#xff08;进阶&#xff09;1. 确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例来推导dp数组 322. 零钱兑换1. 确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 279.完全平方…

01.IDEA中出现Cannot resolve symbol ‘SpringApplication异常

试了很多次&#xff0c;看了这篇文章终于发现了问题。IDEA解决springboot工程中Cannot resolve symbol SpringApplication异常-CSDN博客 我存在的问题在于Maven home path有误&#xff0c;改正之后就没有问题&#xff0c;不标红了。

逆向案例十二——看准网企业信息json格式的信息

网址&#xff1a;【全国公司排行|排名榜单|哪家好】-看准网 打开开发者工具——刷新——网络——XHR——下滑页面加载新的页面——找到数据包 发现参数加密&#xff0c;返回的数据也进行了加密 按关键字在下方搜索 kiv进入第一个js文件 ctrlf打开文件里面的搜索框继续搜kiv找到…