前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)

Vite是一个快速的前端开发和构建工具,它可以大大提高Web应用程序的开发速度。Vite的主要特点是快速的启动时间和快速的热更新,这使得开发人员可以更快地测试和调试他们的代码,它的目标是提供一种简单、轻量级的开发环境,能够快速启动项目并实时预览。

图片[1]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

Vite采用了一种新的开发模式,利用现代浏览器的原生ES模块支持,将开发过程中的构建步骤推迟到了运行时。在这篇博客中,我将深入了解Vite内容,包括它的特点、组成、安装和使用、热更新、环境变量、插件的安装与配置、开发服务器的启动、以及如何使用它来加速我们的开发流程,最后就是它的其他一些功能(缓存、ts、css、静态资源处理等)。

Vite概述

Vite是新一代前端开发与构建工具,能够显著提升前端开发体验。Vite意在提供开箱即用的配置,同时它的插件API和JavaScript API带来了高度的可扩展性,并有完整的类型支持。由于其原生ES模块导入方式,可以实现非常快的冷服务器启动。

Vite是vue的作者尤雨溪在开发vue3.0的时候开发的一个基于原生ES-Module的前端构建工具。其本人在后来对vue3的宣传中对自己的新作品Vite赞不绝口,并表示自己”再也回不去webpack了“。

Vite的构建

Vite提供了一套原生ESM的HMR API。 具有HMR功能的框架可以利用该API提供即时、准确的更新,而无需重新加载页面或清除应用程序状态。Vite内置了HMR到Vue.js单文件组件(SFC)和React Fast Refresh中。

Vite的组成

一个开发服务器,它基于原生ES模块,提供了丰富的内建功能,速度快,支持模块热更新(HMR)。

一套构建指令,它使用rollup打包代码,并且它是预配置的,开箱即用,可输出用于生产环境的高度优化过的静态资源。同时也提供了丰富的插件api,带来了高度的可扩展性。可以用于构建vue,react等项目。

为什么选择 Vite

Vite在开发过程中的一个主要优势是快速启动时间。传统的前端开发工具(如webpack)在启动项目时需要进行大量的构建工作,包括解析模块、编译代码、打包资源等。而Vite利用了浏览器对原生ES模块的支持,可以直接在浏览器中运行源码,避免了繁琐的构建过程,从而实现了秒级启动时间。

另外,Vite还支持热模块替换(HMR),这意味着在开发过程中修改代码后,页面会立即更新,无需手动刷新。这极大地提高了开发效率,让开发者能够更快地看到修改的结果。

Vite的安装和使用

图片[2]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

要使用Vite,首先需要确保你的开发环境中已经安装了Node.js(建议使用最新版本)。然后,你可以使用以下命令全局安装Vite,我们可以使用npm或yarn来安装它。在命令行中输入以下命令:

npm install -g create-vite

安装完成后,你可以在命令行中使用`create-vite`命令来创建一个新的Vite项目:

创建项目

create-vite my-project

或者默认不填则会为我们创建一个名为vite-project的项目,根据自己情况选择一个框架,这里我选择的是Vue

图片[3]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

图片[4]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

这将在当前目录下创建一个名为`vite-project`的新项目。目录结构如下

图片[5]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

接下来,根据命令行上的提示,进入项目目录并安装依赖,执行如下命令:

cd vite-project

npm install

使用npm构建vite的项目

当然了,你也可以通过安装vite结合npm来构建一个vite的项目,步骤和指令如下:

npm install -g vite

yarn global add vite

创建一个新的Vite项目。我们可以使用以下命令来创建一个新项目:

npm init vite-app my-project

或者

yarn create vite-app my-project

这将创建一个新的名为“my-project”的项目,并在其中安装所有必要的依赖项。在安装完成后,我们可以进入该项目并启动开发服务器。跟上面步骤类似。

启动开发服务器

安装完成后,要启动开发服务器,我们可以使用以下命令启动项目:

cd vite-project

npm run dev

或者

cd vite-project

yarn dev

这将启动开发服务器,并在浏览器中打开一个新的窗口,显示我们的应用程序。

图片[6]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

这将启动一个开发服务器,并在浏览器中打开项目的预览页面。你可以在浏览器中实时预览和调试项目,同时在代码中进行修改后,页面会立即更新。

图片[7]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

使用Vite的热更新

一旦我们启动了开发服务器,我们就可以开始使用Vite的热更新功能来加速我们的开发流程。这意味着我们可以在不刷新整个页面的情况下,立即看到我们所做的更改。

例如,我们可以在我们的代码中添加一些文本,并在保存后立即看到更改。

  

My Name is SteveRocket

Welcome to my CTO Plus

图片[8]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

图片[9]-前端开发技术栈(工具篇):2024深入了解快速开发工具vite的安装和使用(详细)-JieYingAI捷鹰AI

在保存后,我们可以立即看到新的文本,这个过程根本不需要重启服务,浏览器直接所见即所得。

构建和部署

在开发完成后,你可以使用以下命令构建项目:

npm run build

这将生成一个优化过的生产版本,包括压缩代码、提取公共模块、生成文件指纹等。构建完成后,你可以将生成的文件部署到生产环境中。

默认情况下,Vite生成的构建文件是静态的,你可以将其部署到任何静态文件服务器上。如果你使用的是现代浏览器,你还可以使用Vite提供的预渲染功能,将页面预渲染为静态HTML文件,以提供更好的性能和SEO。

Vite的环境变量

接下来,我们来看下Vite一个重要的功能:环境变量,它允许开发者根据不同的环境配置应用程序的行为。

Vite的环境变量可以通过两种方式进行配置:命令行参数和`.env`文件。

首先,我们来看一下命令行参数。在启动Vite开发服务器时,可以使用`--env`参数来传递环境变量。例如,`vite --env.NODE_ENV=production`会将`NODE_ENV`设置为`production`。在应用程序中,可以使用`import.meta.env`来访问这些环境变量。例如,`import.meta.env.NODE_ENV`会返回`production`。

除了命令行参数,还可以使用`.env`文件来配置环境变量。`.env`文件是一个纯文本文件,每一行都是一个`key=value`的键值对。例如,`.env`文件中可以有以下内容:

VITE_API_URL=

VITE_API_KEY=1234567890

在应用程序中,可以使用`import.meta.env.VITE_API_URL`和`import.meta.env.VITE_API_KEY`来访问这些环境变量。

需要注意的是,`.env`文件只能在开发模式下使用。在生产模式下,需要将环境变量配置在服务器上,例如使用Nginx或Apache等服务器软件。

此外,Vite还支持使用`.env.development`、`.env.production`和`.env.local`等特定环境的配置文件。例如,`.env.development`文件中的配置只会在开发模式下生效,`.env.production`文件中的配置只会在生产模式下生效,而`.env.local`文件中的配置会覆盖其他配置文件中的相同配置。

import.meta.env

Vite在一个特殊的import.meta.env对象上暴露环境变量。这里有一些在所有情况下都可以使用的内建变量:

.env文件

如果改变了env文件的代码,需要重启服务后才会生效

Vite使用dotenv从你的环境目录中的下列文件加载额外的环境变量:

.env#所有情况下都会加载

.env.local#所有情况下都会加载,但会被git忽略

.env.[mode]#只在指定模式下加载

.env.[mode].local#只在指定模式下加载,但会被git忽略

环境加载优先级

一份用于指定模式的文件(例如.env.production)会比通用形式的优先级更高(例如.env)。

另外,Vite执行时已经存在的环境变量有最高的优先级,不会被.env类文件覆盖。例如当运行VITE_SOME_KEY=123 vite build的时候。

.env类文件会在Vite启动一开始时被加载,而改动会在重启服务器后生效。

加载的环境变量也会通过import.meta.env以字符串形式暴露给客户端源码。

为了防止意外地将一些环境变量泄漏到客户端,只有以VITE_为前缀的变量才会暴露给经过vite处理的代码。例如下面这些环境变量:

VITE_SOME_KEY=123

DB_PASSWORD=foobar

只有VITE_SOME_KEY会被暴露为import.meta.env.VITE_SOME_KEY提供给客户端源码,而DB_PASSWORD则不会。

js

console.log(import.meta.env.VITE_SOME_KEY) // 123

console.log(import.meta.env.DB_PASSWORD) // undefined

此外,Vite使用dotenv-expand来直接拓展变量。想要了解更多相关语法,请查看它们的文档。

请注意,如果想要在环境变量中使用$符号,则必须使用对其进行转义。

KEY=123

NEW_KEY1=test$foo   # test

NEW_KEY2=test$foo  # test$foo

NEW_KEY3=test$KEY   # test123

如果你想自定义env变量的前缀,请参阅envPrefix。

安全注意事项

TypeScript的智能提示

默认情况下,Vite在vite/client.d.ts中为import.meta.env提供了类型定义。随着在.env[mode]文件中自定义了越来越多的环境变量,你可能想要在代码中获取这些以VITE_为前缀的用户自定义环境变量的TypeScript智能提示。

要想做到这一点,你可以在src目录下创建一个env.d.ts文件,接着按下面这样增加ImportMetaEnv的定义:

typescript

/// 

 

interface ImportMetaEnv {

  readonly VITE_APP_TITLE: string

  // 更多环境变量...

}

 

interface ImportMeta {

  readonly env: ImportMetaEnv

}

如果你的代码依赖于浏览器环境的类型,比如DOM和WebWorker,你可以在tsconfig.json中修改lib字段来获取类型支持。

json

{

  "lib": ["WebWorker"]

}

HTML环境变量替换

Vite还支持在HTML文件中替换环境变量。import.meta.env中的任何属性都可以通过特殊的%ENV_NAME%语法在HTML文件中使用:

html

Vite is running in %MODE%

Using data from %VITE_API_URL%

如果环境变量在import.meta.env中不存在,比如不存在的%NON_EXISTENT%,则会将被忽略而不被替换,这与JS中的import.meta.env.NON_EXISTENT不同,JS中会被替换为undefined。

模式

默认情况下,开发服务器(dev命令)运行在development (开发)模式,而build命令则运行在production (生产)模式。

这意味着当执行vite build时,它会自动加载.env.production中可能存在的环境变量:

# .env.production

VITE_APP_TITLE=My App

在你的应用中,你可以使用import.meta.env.VITE_APP_TITLE渲染标题。

在某些情况下,若想在vite build时运行不同的模式来渲染不同的标题,你可以通过传递--mode选项标志来覆盖命令使用的默认模式。

例如,如果你想在staging(预发布)模式下构建应用:

bash

vitebuild--modestaging

还需要新建一个.env.staging文件:

# .env.staging

VITE_APP_TITLE=My App (staging)

由于vite build默认运行生产模式构建,你也可以通过使用不同的模式和对应的.env文件配置来改变它,用以运行开发模式的构建:

# .env.testing

NODE_ENV=development

Vite的配置

Vite的默认配置已经足够满足大多数项目的需求,但如果你需要进行一些自定义配置,你可以在项目根目录下创建一个`vite.config.js`文件,并导出一个配置对象(我构建的项目默认就生成了该文件)。例如,你可以指定项目的入口文件、输出目录、代理设置等。你还可以通过配置插件来扩展Vite的功能,例如添加TypeScript支持、CSS预处理器等。

以下是一个简单的`vite.config.js`配置示例:

module.exports = {  // 入口文件  root: './src/main.js',  // 输出目录  build: {    outDir: './dist',  },  // 代理设置  server: {    proxy: {      '/api': 'http://localhost:3000',    },  },};

Vite的插件安装与配置

Vite还提供了许多有用的插件,可以帮助我们进一步加速我们的开发流程。例如,我们可以使用Vite的插件来自动格式化我们的代码、自动补全我们的代码、自动检测我们的代码中的错误等等。

要使用Vite的插件,我们可以在我们的项目中安装它们,并在我们的配置文件中配置它们。例如,要安装Vite的自动格式化插件,我们可以使用以下命令:

npm install vite-plugin-prettier

或者

yarn add vite-plugin-prettier

然后,我们可以在我们的Vite配置文件中配置该插件:

import { defineConfig } from 'vite';import vue from '@vitejs/plugin-vue';import prettier from 'vite-plugin-prettier';
export default defineConfig({  plugins: [    vue(),    prettier({      // options    }),  ],});

Vite其他功能介绍npm依赖解析和构建

原生ES导入不支持下面这样的裸模块导入:

js

import { someMethod } from 'my-dep'

上面的代码会在浏览器中抛出一个错误。Vite将会检测到所有被加载的源文件中的此类裸模块导入,并执行以下操作:

1.预构建它们可以提高页面加载速度,并将CommonJS / UMD转换为ESM格式。预构建这一步由esbuild执行,这使得Vite的冷启动时间比任何基于JavaScript的打包器都要快得多。

2.重写导入为合法的URL,例如/node_modules/.vite/deps/my-dep.js?v=f3sf2ebd以便浏览器能够正确导入它们。

依赖是强缓存的

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享