Vite 4.4 正式版发布,全面拥抱 Lightning CSS

news2024/12/23 12:50:31

一、什么是 Vite

Vite 是由 Evan You 推出的下一代前端构建工具,是官方 Vue CLI 的替代品,速度非常快。Vite 利用原生 ESM 并使用 Rollup 处理开发和打包工作。 从功能上讲,它的工作方式类似于预配置的 webpack 和 webpack-dev-server,但在速度方面具有无可比拟的优势。
在这里插入图片描述

相比其他的构建工具,Vite 具有以下优点和特征:

  • 强大的 HMR 支持:Vite 提供了一个 HMR API, 在应用程序运行时交换、添加或删除模块,无需完全重新加载,显著加快开发过程。
  • 开箱即用的Typescript支持: Vite 使用名为 esbuild 的JavaScript 打包器将 TypeScript 代码转换为 JavaScript。
  • Vite 在提供的所有 JavaScript 文件中检测类裸模块导入,并将它们重写为解析路径以反映包在 node_modules 文件夹中的位置,以便浏览器可以正确处理它们。
  • 开箱即用地支持 Vue3 单文件组件 、Vue 3 JSX 组件和 Vue 2 组件,还支持 JSX 文件(.jsx、.tsx)、CSS 文件导入、PostCSS、CSS 模块和 CSS 预处理器,如 Sass、LESS 和 Stylus。

目前,Vite已经发布了4.4的正式版本,下面就来看看4.4发布的新功能吧!

二、Lightning CSS支持

2.1 什么是 Lightning CSS

Lightning CSS 是一个用 Rust 编写的极快的 CSS 解析器、转换器和压缩器。通俗的讲,Lightning CSS就是Rust版本的PostCSS,然后 Lightning CSS内置了一些功能,比如 CSS压缩,语法降级,语法支持前缀,CSS模块化功能。

并且,Lightning CSS可以与 Parcel 一起使用,也可以作为独立库或 CLI,或通过插件与任何其他工具一起使用。与其他的CSS方案相比,Lightning CSS具有明显的优势:
在这里插入图片描述

Lightning CSS 具有以下非常优秀特性:

  • 速度极快 :解析和压缩大文件可在几毫秒内完成,输出通常比其他工具小得多,同时进行了大量的优化,比如:属性合并、 减少 calc() 表达式、颜色尽量转换为较短的十六进制表示法等等
  • 浏览器级解析器 : Lightning CSS 构建于 Mozilla 创建并由 Firefox 和 Servo 使用的 cssparser 和选择器箱之上。 这提供了坚实的通用 CSS 解析基础,在此基础上 Lightning CSS 实现了对所有特定 CSS 规则和属性的支持。
  • 支持供应商前缀 : Lightning CSS 接受浏览器目标列表,并自动添加(和删除)供应商前缀,同时支持选择加入浏览器列表配置,以解析浏览器目标并与现有的工具和配置设置集成。

目前,Lightning CSS 在 Github 上通过 MPL-2.0 协议进行开源,有超过 4.1k 的 star、NPM 周平均下载量 150k+、代码贡献者 50+,是一个值得关注的前端优质开源项目。

2.2 实验性支持 Lightning CSS

从 Vite 4.4 开始,实验性支持 Lightning CSS。 开发者可以通过将 css.transformer: ‘lightningcss’ 添加到 Vite 配置文件并安装可选的 lightingcss 开发依赖项来启用。 如果启用,CSS 文件将由 Lightning CSS 而不是 PostCSS 处理。

要配置CSS模块,你需要使用css.lightningcss.cssModules 来替代css.modules(后者用于配置PostCSS如何处理CSS模块)。默认情况下,Vite使用esbuild来压缩CSS。 Lightning CSS也可以通过build.cssMinify: ‘lightningcss’ 作为CSS压缩器。

三、升级 esbuild v0.18

3.1 esbuild v0.18 新特性

esbuild 0.18 包含向后不兼容的更改, 为了避免自动选择该版本,开发者可以在 package.json 文件中固定 esbuild 的确切版本(推荐),或者使用仅接受 patch 升级的版本范围语法,例如 ^0.17.0 或 ~0.17.0。

此版本中的重大更改主要集中于修复 esbuild 处理 tsconfig.json 文件的一些长期存在的问题,具体如下:

  • 添加在线尝试 esbuild 的方法
  • esbuild 的 tsconfig.json 支持的更改
  • 添加针对 Safari 16.2 及更早版本中的错误的解决方法
  • 修复 esbuild 的 TypeScript 类型声明以禁止未知属性
  • 修复伪元素的 CSS 嵌套转换
  • 禁止在嵌套 CSS 中的类型选择器之前使用

sbuild v0.18 包含了对 esbuild tsconfig.json 文件处理的向后不兼容的更改,目前 Vite 官方评估暂时不影响 Vite 用户。

详细参考:https://esbuild.github.io/getting-started/

3.2 create-vite 支持 Solid 和 Qwik 的模板

首先,我们使用crete命令创建一个 Vite 项目,命令如下:

npm create vite@latest
// npm
yarn create vite
// yarn
pnpm create vite
// pnpm

当然,我们也可以在创建项目时指定要使用的模板。例如,要构建一个 Vite + Vue 项目,可以运行下面命令:

//  npm 6.x
npm create vite@latest my-vue-app --template vue
// npm 7+, extra double-dash is needed:
npm create vite@latest my-vue-app -- --template vue
// yarn
yarn create vite my-vue-app --template vue
// pnpm
pnpm create vite my-vue-app --template vue

在 Vite 4.4 版本中除了使用原有的模板外,如:vanilla, vanilla-ts, vue, vue-ts, react, react-ts, react-swc, react-swc-ts, preact, preact-ts, lit, lit-ts, svelte, svelte-ts,还支持了 solid, solid-ts, qwik, qwik-ts 等其他应用模板。

并且,开发者可以通过 vite.new/solid-ts 和 vite.new/qwik-ts 进行在线体验和编写代码。

四、其他

在这里插入图片描述

除了前面介绍的功能外,Vite 4.4还更新了如下的内容:

  • 预览模式添加键盘快捷键
  • asset 类型支持
  • emit 事件来处理 chunk 加载错误
  • 导入公共 non-asset URL
  • fs.allow 的支持文件
  • 当动态导入模块与静态导入并存时输出警告
  • 在页面重新加载时添加去抖
  • 添加 WebSocket 连接事件
  • 友好的 ESM 文件需要错误
  • 支持导入预处理样式
  • 支持内联样式的图像集
  • 支持子导入模式
  • 支持 glob include

并且,最新的Vite文档现在支持韩语,可在 ko.vitejs.dev 获取。

参考:

https://lightningcss.dev/
使用Vite从零搭建前端项目
使用Vite快速构建前端React项目
在Vite项目中接入CSS工程化方案
如何在Vite项目中处理静态资源
Vite 是如何站在巨人的肩膀上实现的
深入Vite:再谈ESM的高阶特性
Vite如何实现秒级依赖预构建的能力
深入浅出Vite:如何开发一个Vite插件
Vite是如何实现Esbuild打包的
深入浅出Vite:Vite打包与拆分
如何在Vite项目中使用Lint保证代码质量
深度剖析Vite配置文件

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

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

相关文章

软考_软件设计师(中级)

视频链接:(zst_2001) https://www.bilibili.com/read/cv18526892?spm_id_from333.999.0.0 文章目录 1、计算机系统2、程序设计语言3、知识产权4、数据库5、面向对象6、UML7、设计模式8、操作系统9、结构化开发10、软件工程11、信息安全&…

【MCU学习】RTthread工程介绍

RT-Thread架构 RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。 RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面…

Ubuntu18.04安装Autoware1.15(解决Openplanner无法绕障的问题:Openplanner2.5)

文章目录 一、下载Autoware1.15源码二、安装依赖三、修改CUDA版本四、编译以及报错解决编译(1)报 undefined reference to cv::Mat::Mat() 的错就按照下面方式改相应包:(2)遇到报错:(3&#xff…

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间,但是该色彩空间过于抽象,我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色,HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间,我们能够更加方便地通过色调、…

web APIs-练习一

轮播图点击切换&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"…

Servlet——使用Servlet编程的基本流程。

文章目录 前言一、创建项目创建Maven项目介绍Maven项目 二、引入依赖三、创建目录四、编写代码五、打包六、部署七、验证总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互关一下&#xff0c;…

软件测试面试题及答案【史上最全】

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

微信小程序开发使用echarts报错Cannot read property ‘getAttribute‘ of undefined

如图&#xff0c;我在小程序圈中的区域渲染echarts图标报错了&#xff0c;报错提示Cannot read property getAttribute of undefined 这里的canvas &#xff0c;width ,height,dpr获取为 undefined 分析问题&#xff1a; 初始化图表时传递错误的参数&#xff1a; 在 onShow 生…

靶向RNA-seq全面解决方案和加速分析,只看这篇就够了!

背景 RNA-seq&#xff0c;即通过高通量测序技术进行的转录组测序分析技术。最初作为研究mRNA&#xff0c;small RNA&#xff0c;non-coding RNA 等表达水平、表达差异基因的应用&#xff0c;在过去的十几年内迅速发展。而今&#xff0c; RNA-seq 在转录本变异、基因融合、可变…

安全文件传输:如何降低数据丢失的风险

在当今数字化时代&#xff0c;文件传输是必不可少的一项工作。但是&#xff0c;数据丢失一直是一个令人头疼的问题。本文将探讨一些减少数据丢失风险的方法&#xff0c;包括加密、备份和使用可信的传输协议等。采取这些措施将有助于保护数据免受意外丢失的危险。 一、加密保护数…

抖音矩阵系统源码开发搭建部署分享

一、 功能开发设计 &#xff08;1&#xff09;数据概览&#xff1a;账号&#xff0c;视频top10数据统计 &#xff08;2&#xff09;AI视频创意&#xff1a;原创视频批量剪辑&#xff0c;阶乘算法&#xff0c;去重原理 &#xff08;3&#xff09;同城拓客&#xff1a;线下门店…

整体认识和路由配置、基础数据渲染、热榜区域实现、图片预览组件封装、认识SKU组件、通用组件统一注册全局(详情页)【Vue3】

详情页 整体认识和路由配置 整体业务认识 路由配置 准备组件模板 <script setup></script><template><div class"xtx-goods-page"><div class"container"><div class"bread-container"><el-breadc…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…

Linux文件管理

WINDOWS/LINUX目录对比 Windows: 以多根的方式组织文件 C:\ D:\ E: Linux: 以单根的方式组织文件 / (根目录) Linux目录简介 /目录结构&#xff1a; FSH (Filesystem Hierarchy Standard) [rootlocalhost ~]# ls / bin dev lib media net root srv usr boot etc lib64 misc …

Qt5.14.2下载及安装

1. 下载 https://download.qt.io/archive/qt/5.14/5.14.2/ 由于Qt 自从5.15版本开始&#xff0c;对非商业版本&#xff08;也就是开源版本&#xff09;&#xff0c;不提供已经制作好的离线exe安装包。所以&#xff0c;对于5.15&#xff08;含&#xff09;之后的版本&#xff…

混合背包--暗黑游戏(pgrune)

混合背包&#xff1a;包含着01背包&#xff0c;完全背包,多重背包 而这个题通过k[i]进行判断是哪个背包&#xff0c;少了个完全背包。 #include<bits/stdc.h> using namespace std; const int N1000; int vp[N]; int vr[N]; int k[N]; int w[N]; int f[151][151]; int m…

C++模拟实现list

1.首先要了解到vs底层的list链表是带头双向循环的链表。 所以首先就要看成员变量 那么就说明我们还需要构造一个Node的结构体&#xff0c;&#xff08;typedef一下就好了&#xff0c;名字不影响&#xff09; 现在就可以完成间的push_back函数了。 1.list的iterator 我们之前模…

随手笔记——3D−2D:PnP

随手笔记——3D−2D&#xff1a;PnP 说明理论源代码雅可比矩阵求解 说明 PnP&#xff08;Perspective-n-Point&#xff09;是求解3D到2D点对运动的方法。它描述了当知道n个3D空间点及其投影位置时&#xff0c;如何估计相机的位姿。 理论 特征点的3D位置可以由三角化或者RGB-…

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求 在炎凰日常的开发中&#xff0c;对于服务器上的需求&#xff0c;我们基本都是采用云服务。目前我们主要选择的是华为云&#xff0c;华为云的云主机比较稳定&#xff0c;提供的云主机配置也比较多样&#xff0c;非常适合对于不同场景硬件配置的需求&#xff…

【前端笔记】本地运行cli项目报错ERR_OSSL_EVP_UNSUPPORTED

报错原因 Node版本>17.x&#xff0c;本地npm run 起项目后会发现终端报错&#xff0c;具体有以下2块关键信息&#xff1a; Error: error:0308010C:digital envelope routines::unsupported和 opensslErrorStack: [ error:03000086:digital envelope routines::initializa…