热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是Vite:现代和超快速项目工具指南下一代前端工具

Vite是一款用于脚手架和捆绑项目的现代、超快速工具,由于近乎即时的代码编译和快速的热模块更换,它迅速变得流行起来。在本文中,您将了解Vite是什么以及如何使用它来构建新项目,等等

Vite 是一款用于脚手架和捆绑项目的现代、超快速工具,由于近乎即时的代码编译和快速的热模块更换,它迅速变得流行起来。在本文中,您将了解Vite是什么以及如何使用它来构建新项目,等等。

今天创建新项目的方式与我们多年前创建项目的方式大不相同。过去,通常的方法是创建一个文件夹,然后从创建一堆HTML,CSS和JS文件开始。使用FTP客户端手动部署项目,文件按原样上传,无需任何处理和优化,如缩小或压缩。

多年来,事情发生了变化,因为现在我们有很多令人惊叹的工具,如Babel和webpack,使我们作为开发人员的生活更轻松。我们应该密切关注生态系统,因为它发展得很快。在Web开发中,去年出现了一种新工具,它提供了Create React App(CRA)的替代方案,并且越来越受欢迎。它的创建者名为Vite(Vite.js),将其描述为“下一代前端工具”。今天,我们将探讨他们对荣耀的主张,看看如何使用Vite而不是CRA - 以及为什么!

如今,许多项目都是通过使用功能丰富的CLI工具启动的,这些工具提供具有代码转译和有用优化等功能的样板设置,或者是具有热模块替换的开发服务器。

许多流行的框架都提供了可用于基架项目的官方 CLI。例如,React 有 Create React App,而 Vue 有 Vue CLI。但是,这个领域还有其他竞争者不一定是特定于框架的。这就是为什么Vite,用于脚手架和构建现代项目的框架不可知工具,值得我们关注。因此,请继续阅读,了解Vite.js - 让我们确保我们与时俱进。

Vite的用途是什么?

Vite由Vue.js框架的创建者Evan You创建,是下一代前端工具,可提供超快的开发服务器,捆绑和出色的开发人员体验。当我说快速时,我是认真的 - 因为与其他工具(如webpack,Rollup或Parcel)相比,启动时间可以减少十倍。

是什么让Vite.js快?

Vite利用了原生ES模块,这些模块在常绿浏览器中受支持。在开发环境中,Vite运行一个服务器,用于通过ES模块动态编译和提供任何所需的依赖项。这种方法允许Vite处理和提供当时所需的代码。因此,Vite在服务器启动和代码更新期间需要处理的代码要少得多。对于其他工具(例如webpack)来说,情况并非如此。我们稍后将介绍为什么会这样。

Vite如此快速的另一个原因是因为它在开发过程中使用esbuild来预捆绑依赖项。esbuild是一个用Go语言编写的非常快速的Javascript捆绑器。在下面,您可以看到esbuild fairs与其他捆绑器(例如使用Javascript编写的webpack,Rollup和Parcel)的比较。

正如基准所示,差异是巨大的。现在,让我们来看看Vite与webpack的区别。

Vite vs. webpack

webpack是Web项目最常用的捆绑器之一,但它比Vite慢得多。原生ES模块的使用使Vite比webpack具有显着的速度优势,webpack以不同的方式处理代码和捆绑依赖项。webpack 在开发服务器准备就绪之前捆绑项目中的所有文件。

这是Webpack速度慢得多的最重要原因之一,尤其是在大型项目中。随着项目的增长,需要处理的代码量也会增加,因此使用webpack的编译过程只会越来越长。同样,在代码更新的热模块替换期间,webpack 需要做更多的处理来更新捆绑包并在开发过程中提供最新的代码。由于使用了本机ES模块,因此Vite的情况并非如此。下图显示了Vite如何处理文件。

如果我们有一个应用程序,其中包含一些页面,如主页,关于,联系人等,并且我们访问主页,我们真的只需要主页的代码,这就是我们通过Vite获得的。webpack将处理所有页面的代码,然后才为主页提供代码。

现在,让我们来看看如何使用Vite构建React项目。

使用 Vite 构建 React 项目的脚手架

Vite可用于为多个框架构建项目,例如React,Vue,Svelte等。对于此示例,让我们创建一个 React 应用程序。在终端中运行以下命令之一。

# npm 6.x npm init [email protected] my-vite-react-app --template react # npm 7+, extra double-dash is needed: npm init [email protected] my-vite-react-app -- --template react # yarn yarn create vite my-vite-react-app --template react # pnpm pnpm create vite my-vite-react-app -- --template react

项目搭建基架后,cd放入其中,安装所有依赖项并启动开发服务器。

$ cd my-vite-react-app $ npm install // or yarn $ npm run dev // or yarn dev

默认情况下,开发服务器在端口 3000 上启动,因此请在浏览器中 http://localhost:3000。您应该看到类似下面的内容:

这就是为项目搭建脚手架。让我们来看看如何将预处理器(如 SCSS)添加到 Vite 项目中。

使用预处理器

Vite内置了对Sass,Less和Stylus的支持。只需将它们作为依赖项安装,即可将它们添加到项目中。对于此示例,让我们安装 Sass。

$ npm install -D sass

接下来,让我们将计数器逻辑从文件移动到名为 的新组件。App.jsxCounter

src/components/Counter.jsx

import { useState } from "react"; import styles from "./counter.module.scss"; const Counter = () => { const [count, setCount] = useState(0); return (

); }; export default Counter;
React JSX

使用 Sass 就像创建一个扩展名的新文件,然后将其导入到组件中一样简单。除了 Sass,我们还将使用 CSS 模块。只需在文件名中的文件扩展名之前添加即可使用它们。例如,或者如果您使用的是 CSS 预处理器。.scss.modulestyles.module.cssstyles.module.scss

src/components/counter.module.scss

.counter { background-color: bisque; }

断续器

最后,更新文件。App.jsx

src/App.jsx

import "./App.css"; import Counter from "./components/Counter"; function App() { return (

); } export default App;
React JSX

使用 Vite 进行路径解析和绝对导入

我真正发现麻烦的一件事是必须使用相对路径导入组件。虽然我们的例子很简单,但我处理的项目有很多嵌套文件,有时导入看起来像这样:

import FancyModal from '../../../../components/modal/FancyModal/FancyModal.jsx'

断续器

相反,如果我们能做这样的事情,那不是很好吗?

import FancyModal from '@/components/modal/FancyModal/FancyModal.jsx'

断续器

就个人而言,我更喜欢使用绝对进口,因为它们更干净。我们可以通过修改文件来配置Vite以支持它们。在下面,您可以看到用于添加将解析到目录的别名的代码。vite.config.js@src

vite.config.js

import path from "path"; import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, });

断续器

除了配置Vite来解析别名之外,我们还需要告诉代码编辑器。我们可以通过创建包含以下内容的文件来执行此操作。@jsconfig.json

jsconfig.json

{ "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["src/*"] } } }

断续器

如果您使用的是TypeScript,那么您将在文件中执行此操作。tsconfig.json

最后,我们可以更新导入。Counter

src/App.jsx

import "./App.css"; import Counter from "@/components/Counter"; function App() { return (

); } export default App;
React JSX

环境变量

在使用Vite的脚手架应用程序中使用环境变量时,存在细微的差异。首先,文件中定义的任何应向客户端代码公开的环境变量都需要以 word 为前缀。在根目录中创建一个新文件并添加变量,如下所示。.envVITE_.envVITE_MESSAGE

.env

VITE_MESSAGE="Hello Vite!"

断续器

另一个区别是我们如何在应用程序中访问此环境变量。大多数 CLI(如 Create React App)都会公开对象上的环境变量。但是,Vite会将它们暴露出来。process.envimport.meta.env

让我们更新组件以显示消息。AppHello Vite!

src/App.jsx

import "./App.css"; import Counter from "./components/Counter.jsx"; function App() { return (

{import.meta.env.VITE_MESSAGE}
); } export default App;
React JSX

Vite的优缺点

让我们来看看Vite的一些更突出的优缺点。

优点

  • 正如我们已经建立的那样,使用Vite的一个巨大优势是通过即时更换热模块来快速启动。它比其他 CLI 快得多,例如 Create React App 或 Vue CLI,它们在引擎盖下使用 webpack。
  • 对 TypeScript 的开箱即用支持。
  • CSS预处理器支持Sass,Less和Stylus,以及PostCSS和CSS Modules。
  • Vite 与框架无关,可与多个框架配合使用。例如,它为 React、Vue、Preact、Svelte、Lit 甚至 vanilla Javascript 和 TypeScript 提供了官方模板。
  • 它提供多页支持。
  • Vite提供了一个“库模式”,可用于创建面向浏览器的库。

缺点

  • 不同的工具用于捆绑开发和生产代码。esbuild 用于开发,而生产捆绑包是使用汇总构建的。在极少数情况下,对开发和生产环境使用不同的工具可能会导致难以调试和修复的错误。代码在开发过程中可以正常运行,但是在捆绑生产后,它将停止工作。我个人遇到了这样的问题,在GitHub上,开发人员报告了问题,例如#2139和#5803。
  • Vite的另一个缺点是对Jest缺乏一流的支持,Jest是最流行的Javascript测试框架之一。如果您有兴趣了解有关添加Jest支持进度的更多信息,可以关注此问题。

总结

Vite是一个了不起的工具,可以大大加快开发速度并节省大量时间。使用Vite的好处很大,但是缺乏Jest支持和偶尔难以调试的问题可能会对一些开发人员造成交易破坏。与任何新工具一样,由您决定是否值得立即切换到它,或者在此期间使用其他 CLI 来管理项目 - 这完全取决于您的团队和项目的最佳选择。


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • TCL华星成功研制出全球最窄LCD下边框模组产品
    TCL华星成功研制出全球最窄LCD下边框模组产品,该模组下边框较现有规格减小20%。面板技术和工艺的不断演变使得手机屏幕的左、右、上三边边框已达到极致规格,但下边框仍然是影响屏幕屏占比的最大因素。为了突破下边框的技术难题,TCL华星成立了专项技术团队,经过2年的攻关,他们通过创新的IC设计、面板设计、制程工艺等方面的突破,将LCD模组下边框压缩至全球最小2.4mm。 ... [详细]
author-avatar
了不起的老狐_226
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有