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 vite@latest my-vite-react-app --template react# npm 7+, extra double-dash is needed:
npm init vite@latest 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 (<div className={styles.counter}><button type="button" onClick={() => setCount(count => count + 1)}>count is: {count}</button></div>);
};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 (<div className="App"><Counter /></div>);
}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 (<div className="App"><Counter /></div>);
}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 (<div className="App"><Counter />{import.meta.env.VITE_MESSAGE}</div>);
}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 来管理项目 - 这完全取决于您的团队和项目的最佳选择。

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

  1. cnpm安装webpack_快速打造最强 Webpack 前端工具链

    当前,前端技术日新月异,公司的团队技术栈和业务场景不同,都会建立自己的前端工程体系.一个好的工程体系能够保证团队的研发流程规范,提高团队的研发效率,能够减少人员流动带来的项目交接和维护成本.2-3个项 ...

  2. NanoDet:轻量级(1.8MB)、超快速(移动端97fps)目标检测项目

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:RangiLyu  编译:CV君 来自:OpenCV大本营 以下内容为作者介绍: 特点: 超轻量 ...

  3. Kraken:使用精确比对的超快速宏基因组序列分类软件

    文章目录 Kraken:使用精确比对的超快速宏基因组序列分类 热心肠日报 摘要 主要结果 图1. Kraken序列分类算法 图2. 基于三个模拟宏基因组的分类程序准确性和速度比较 图3. 基于三个模拟 ...

  4. 开启灯光就是近光吗_科目三考前必看!夜间灯光语音模拟+超全项目操作

    驾考复考在即,你准备好了吗?跟着元贝驾考小编一起来看看,科目三夜间灯光语音模拟+超全项目操作! 上车准备 下面将进行模拟夜间行驶灯光的考试,请在5秒内做出相应的灯光操作 1.语音提示:请开启前照灯 [ ...

  5. 超像素分割算法matlab_像素不够,算法来凑。这个图像超分辨率项目帮你「拍」出高清照片...

    ​图像超分辨率是指由一幅低分辨率图像或图像序列恢复出高分辨率图像.图像超分辨率技术分为超分辨率复原和超分辨率重建.一位 Reddit 网友贴出了自己基于 Keras 的图像超分辨率项目,可以让照片放大 ...

  6. python快速开发app_python 使用Airtest超快速开发App爬虫

    使用Airtest超快速开发App爬虫 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2 ...

  7. NI labview2014/2015/2016的超快速入门教程之使用VI模板(培训一)

    先说说我的超快速入门,一共共讲五部分,每一部分内容是精华的东西,但都有大量图文说明,因此显得东西很多,仔细看下去,对于尚未入门的同学应该是收获很多的 培训一:使用VI模板   培训二:创建一个可安装的 ...

  8. 全面超越Appium,使用Airtest超快速开发App爬虫,你会吗?

    全面超越Appium,使用Airtest超快速开发App爬虫 想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你 ...

  9. 使用Python和OpenCV在图像之间执行超快速的颜色转换

    使用Python和OpenCV在图像之间执行超快速的颜色转换 1. 效果图 2. 原理 2.1 颜色转移算法 2.2 步骤 2.3 算法改进 3. 源码 参考 这篇博客将介绍如何使用Python和Op ...

最新文章

  1. Error creating bean with name 'messageSource' defi
  2. JSP页面中四种“返回按钮”的使用
  3. android findviewbyid定义成静态,findViewById 为null???
  4. Flink的处理背压​原理及问题-面试必备
  5. php 数组 定义 遍历,php针对数组的定义、遍历及删除
  6. Redis持久化的原理及优化
  7. JavaScript内存那点事
  8. 【译】ZFS最佳实践指南-Part2
  9. Layer 提示框tips使用(批量提示)
  10. 设计模式讲解2:static proxy和decorator的不同点
  11. 第十一章:项目风险管理 - (11.1 规划风险管理)
  12. ExDirectUI 5.0 项目重构正式启动
  13. 20个最热门的IT技术职位及薪资
  14. JavaScript给按钮绑定点击事件(onclick)的方法及js常见事件
  15. ExecuteNonQuery()返回-1的问题及解决
  16. Ext3文件系统介绍
  17. Java开源中文分词器的使用方法和分词效果对比
  18. c语言中怎么定义布尔类型变量
  19. 焦化厂有害气体检测传感器选型
  20. Python爬取一号店搜索随意商品实战总结

热门文章

  1. 中科大计算机科学与技术学院钱海,中科大计算机科学与技术学院举办“给生命以温暖,为理想而努力”主题报告会...
  2. 如何判断何时需要将软体组件模组化
  3. 荣耀畅玩7C挑战红米5 Plus,千元手机档的王者对决
  4. iPhone抓包stream
  5. js-双重for循环-输入行列打印爱心
  6. JAVA 卡与 APPLET
  7. 软考高级信息系统项目管理师如何准备论文?
  8. 【C#】C#使用Microsoft.Office.Interop.Word操作Word文档,替换文本
  9. SQL Server 向数据库中创建表并添加数据
  10. 数字图像处理考点分析(一)