vite 快速入门指南

相关链接

  • 演示地址
  • 源码地址
  • vite 官网地址

Vite 是什么

  • Vite 是由 Evan You(Vue.js 创始人)开发的现代前端构建工具,专为提升开发体验而设计。它通过创新的开发模式和高效的构建流程,极大提高了开发效率,尤其在处理大型项目和复杂的前端框架时,表现出色。

  • Vite 的核心特点包括:

  1. 快速启动:通过使用原生 ES 模块,Vite 在开发模式下可以跳过繁琐的打包步骤,直接提供即时的模块服务,显著缩短应用启动时间,特别适合大型项目的开发调试。
  2. 热模块替换(HMR):Vite 支持高效的热模块替换,当代码发生变化时,应用会自动更新相关模块,而无需重新加载整个页面,极大提升了开发时的反馈速度。
  3. 优化的生产构建:在生产模式下,Vite 会利用 Rollup 进行优化打包,支持按需加载、代码分割以及各种预处理器和插件,确保构建输出的高效和高性能。
  4. 高度可配置:Vite 提供灵活的配置系统,能够适配不同项目需求,支持 Vue、React、Svelte、Preact 等多种框架,轻松处理从简单应用到复杂项目的配置要求。
  5. 插件系统:Vite 提供了强大的插件系统,基于 Rollup 插件 API 构建,支持定制化的扩展功能,易于添加构建工具的自定义功能。

快速开始

  • 要开始使用 Vite,首先需要确保 Node.js 的版本为 18+ 或 20+,因为 Vite 依赖这些版本来确保最佳的兼容性。有些项目模板可能还会要求更高的 Node 版本。如果遇到包管理器发出的警告,建议根据提示升级 Node 版本。
初始化一个新项目:
npm create vite@latest
启动开发服务器:
  • 进入项目目录后,运行以下命令启动开发服务器:
npm install
npm run dev

环境变量配置

  • 为了防止意外地将一些环境变量泄漏到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 vite 处理的代码。例如下面这些环境变量:
设置环境娈量
  • 根目录下创建.env 文件 touch.env;
//----------------
VITE_SOME_KEY = 123;
DB_PASSWORD = foobar;

配置自动打开页面

import { defineConfig } from 'vite';export default defineConfig({plugins: [],server: {open: true, // 自动在浏览器中打开应用cors: true, // 允许跨域},
});

配置别名

import path from 'path';
import { defineConfig } from 'vite';export default defineConfig({resolve: {alias: {'@': path.resolve(__dirname, 'src'), // 设置 '@' 为 'src' 目录别名},},
});

设置最低兼容浏览器

import { defineConfig } from 'vite';export default defineConfig({build: {target: 'chrome58', // 设置最低兼容浏览器版本},
});

插件

  • 注意: Vite 旨在为常见的 web 开发工作提供开箱即用的支持。在搜索一个 Vite 或 Rollup 兼容插件之前,请先查看 功能指引。很多场景下,在 Rollup 项目中需要添加插件,而在 Vite 中已经内建支持了。

@vitejs/plugin-legacy 插件使用

  • 为打包后的文件提供传统浏览器兼容性支持。
  1. 下载安装
npm i @vitejs/plugin-legacy -D
  1. 配置插件
// vite.config.js
import legacy from '@vitejs/plugin-legacy';export default {plugins: [legacy({targets: ['defaults', 'not IE 11'],}),],
};

@vitejs/plugin-react 插件使作

  • 使用 esbuild 和 Babel,使用一个微小体积的包脚注可以实现极速的 HMR,同时提升灵活性,能够使用 Babel 的转换管线。在构建时没有使用额外的 Babel 插件,只使用了 esbuild。
  1. 下载安装
npm i @vitejs/plugin-react @mdx-js/rollup react react-dom -D
  1. 配置插件
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import mdx from '@mdx-js/rollup';export default defineConfig({plugins: [{ enforce: 'pre', ...mdx() },react({ include: /\.(mdx|js|jsx|ts|tsx)$/ }),],
});
  1. 使用 react
  • 注意修改 index.htmml 入口文件引用路径
// main.tsx
import { createRoot } from 'react-dom/client';// Clear the existing HTML content
document.body.innerHTML = '<div id="app"></div>';// Render your React component instead
const root = createRoot(document.getElementById('app') as any);
root.render(<h1>Hello, world</h1>);

构建优化

  • Vite 提供了内置的构建优化选项,能自动优化静态资源和第三方依赖项。此外,它还提供了诸如 Tree Shaking、CSS 提取、压缩等功能,确保生成的代码尽可能小且高效。
import { defineConfig } from 'vite';
import path from 'path';export default defineConfig({build: {outDir: 'dist', // 设置打包输出目录sourcemap: true, // 是否生成 sourcemap 文件rollupOptions: {output: {chunkFileNames: 'js/[name]-[hash].js', // 自定义 chunk 文件名entryFileNames: 'js/[name]-[hash].js',assetFileNames: 'assets/[name]-[hash].[ext]',},},terserOptions: {compress: {drop_console: true, // 在生产环境中移除 console.log},},},
});

CSS 处理与预处理器支持

  • Vite 内置支持 CSS 和各种预处理器,如 SASS、LESS 和 Stylus。此外,Vite 还支持自动 CSS 模块化、PostCSS 处理等。
  1. 安装 sass
npm install sass
  1. 在 styles 中使用 sass
// styles.scss
$primary-color: #42b983;body {color: $primary-color;
}
  1. 在 styles 中使用 sass
import './styles.scss';

SSR(服务端渲染)支持

  • Vite 提供对服务端渲染(SSR)的支持,通过配置可以轻松将应用部署到服务端渲染环境中。Vite 支持通过 vite-ssr 或 vite-plugin-ssr 插件实现服务端渲染的能力,并且提供了开箱即用的解决方案。
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],ssr: {noExternal: ['vue'], // 指定不打包为外部依赖的模块},
});

CI/CD 集成

  • Vite 可以方便地与各种持续集成(CI)工具和 CD(持续部署)工具集成。在项目中使用如 GitLab CI、GitHub Actions 或 Jenkins,可以轻松实现自动化构建、测试和部署。
GitHub Actions
name: Deploy to Productionon:push:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Set up Node.jsuses: actions/setup-node@v1with:node-version: '20'- run: npm install- run: npm run build- name: Deployrun: |# 使用自定义脚本或工具进行部署scp -r ./dist/ user@server:/var/www/project

静态资源处理

  • Vite 对静态资源(如图片、字体、媒体文件)有良好的支持,它能够将这些资源处理成基于内容哈希值的文件名,确保缓存的有效性。通过 import 语法,静态资源可以在代码中像模块一样引用:
  • Vite 在生产构建时会将这些资源打包、压缩并生成具有内容哈希的文件名,从而提高缓存效果和加载速度。
import logo from './assets/logo.png';const img = document.createElement('img');
img.src = logo;
document.body.appendChild(img);

文件打包在不同目录

import { defineConfig } from 'vite';export default defineConfig({build: {outDir: 'build',rollupOptions: {output: {entryFileNames: 'js/[name].[hash].js',chunkFileNames: 'js/[name].[hash].js',assetFileNames(assetInfo) {if (assetInfo.name.endsWith('css')) {return 'css/[name].[hash].css';}const imgExts = ['.png', '.jpg', 'jpeg', 'webp', '.svg', '.gif'];if (imgExts.some((ext) => assetInfo.name.endsWith(ext))) {return 'img/[name].[hash][ext]';}return 'assets/[name].[hash][ext]';},},},},
});

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

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

相关文章

2024年健康经济与大数据研讨会(HEBD 2024)2024 Seminar on Health Economics and Big Data

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 2024年经济决策与人工智能国际学术会议 &#xff08;EDAI 2024&#xff09;将在2024年11月08-10日在广东省广州市隆重举行。大会邀请来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师…

spring框架2 DI入门

每次创建maven项目时都要点击设置看一眼配置&#xff0c;需要修改就改一下&#xff0c;改成所存放的位置地址 属性生成&#xff1a;bean值之间的关系 写了一个私有属性 写private BookDao bookDao右键生成&#xff0c;通过setter方法注入一下 点击 确定 DI入门 DI&#xff1a…

插槽slot在vue中的使用

介绍 在 Vue.js 中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于实现组件内容分发的功能。通过插槽&#xff0c;可以让父组件在使用子组件时自定义子组件内部的内容。插槽提供了一种灵活的方式来组合和复用组件。 项目中有很多地方需要调用一个组件&#xff0c;比…

使用Qt实现实时数据动态绘制的折线图示例

基于Qt的 QChartView 和定时器来动态绘制折线图。它通过动画的方式逐步将数据点添加到图表上&#xff0c;并动态更新坐标轴的范围&#xff0c;提供了一个可以实时更新数据的折线图应用。以下是对代码的详细介绍及其功能解析&#xff1a; 代码概述 该程序使用Qt的 QChartView…

时变电磁场(矢量除了是xyz还是t的函数)的麦克斯韦方程

静电场场的磁场方程与电荷守恒定律的矛盾的根本原因在于电荷守恒定律是时空的函数&#xff0c;静磁场的方程是特殊的空间的函数不含t&#xff0c;让其成为时空的函数就对应上了

【GESP】C++一级练习BCQM3017、BCQM3018,输入后输出

接触输入后&#xff0c;两道简单的读取输入后&#xff0c;按要求输出的变量值的题。基本语法的应用&#xff0c;没什么难度。 题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3017-3018/ 【GESP】C一级练习BCQM3017、BCQM3018&#xff0c;输入后输出 | OneCoder接触…

数字化那点事:一文读懂数字孪生

一、数字孪生的定义 数字孪生&#xff08;Digital Twin&#xff09;是指通过数字技术构建的物理实体的虚拟模型&#xff0c;能够对该实体进行全方位、动态跟踪和仿真预测。简单来说&#xff0c;数字孪生就是在一个设备或系统的基础上创造一个数字版的“克隆体”&#xff0c;这…

Agr_Reader 1.7.11 极简优美的RSS阅读器,无广告

Agr Reader是一款简洁、优美、符合Material You风格的RSS阅读器。它不仅提供了强大的全文解析功能&#xff0c;默认支持离线阅读&#xff0c;还具备桌面小组件、自定义样式设置等功能。此外&#xff0c;它支持接入FreshRSS、Tiny Tiny RSS等多种RSS服务&#xff0c;并提供沉浸式…

计算机网络:计算机网络概述 —— 初识计算机网络

文章目录 计算机网络组成部分网络架构协议与标准网络设备网络类型作用实际应用案例 计算机网络 计算机网络是指将多台计算机通过通信设备和通信链路连接起来&#xff0c;以实现数据和信息的交换和共享的技术和系统。它是现代信息社会的基础设施之一&#xff0c;也是互联网的基…

【Spine】引入PhotoshopToSpine脚本

引入 右键Photoshop图标&#xff0c;选择属性 打开文件所在位置 找到目录下的\Presets\Scripts文件夹。 找到Spine目录下的\scripts\photoshop文件夹下的PhotoshopToSpine.jsx 复制它&#xff0c;丢到Photoshop刚才找的那个目录下。 使用 打开.psd文件&#xff0c;检查不要…

(Kafka源码五)Kafka服务端处理消息

Kafka 服务端&#xff08;Broker&#xff09;采用 Reactor 的架构思想&#xff0c;通过1 个 Acceptor&#xff0c;N 个 Processor(N默认为3)&#xff0c;M 个 KafkaRequestHandler&#xff08;M默认为8&#xff09;&#xff0c;来处理客户端请求&#xff0c;这种模式结合了多线…

Android Camera2 与 Camera API技术探究和RAW数据采集

Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口&#xff08;API&#xff09;&#xff0c;它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息&#xff1a; 主要特点&#xff1a; 强大的控制能力&#xff1a;提供…

关于Mac管理员root权限的一些问题总结

&#x1f389; 前言 最近在学习Vue CLI的时候&#xff0c;发现在Vscode里面想要修改文件或者保存文件都会显示“permission denied”&#xff0c;即权限不足。于是想了一些解决方法&#xff0c;记录在此。 &#x1f389; 检查当前用户权限 打开终端&#xff0c;输入以下指令…

好玩的水表电表

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>水表电表</title><style>* {margin:…

从Fast-UMI到Diff-Control:分别改进刷盘机器人UMI的硬件及其所用的扩散策略

前言 24年9.28日下午&#xff0c;微信上的好友丁研究员和我说 hi 周总&#xff0c;我们基于umi改进了一下——弄了一个用户友好的采集系统(当然&#xff0c;现在这个版本还比较初级 后续不断迭代)项目网站为&#xff1a;https://fastumi.com/ 技术报告见&#xff1a;https://…

“洗盘后的曙光:利用通达信选股器捕捉二次拉升股”

在一波上涨行情之后&#xff0c;投资者往往会遇到股票的回调。这时&#xff0c;市场上的两种声音开始交织&#xff1a;一种是认为这是洗盘&#xff0c;即主力在为下一轮拉升做准备&#xff1b;另一种则认为这是出货&#xff0c;主力在悄悄撤离。如何分辨这两者&#xff0c;给大…

基于Leaflet和天地图的细直箭头和突击方向标绘实战

目录 前言 一、细直箭头和突击方向的类设计 1、总体类图 2、对象区别 二、标绘绘制的具体实现 1、绘制时序图 2、相关点的具体绘制 3、最终的成果 三、总结 前言 今天是10月1日国庆节&#xff0c;迎来我们伟大祖国75周年的华诞。有国才有家&#xff0c;在这里首先祝我们…

Python 如何使用 Pandas 进行数据分析

Python 如何使用 Pandas 进行数据分析 在数据分析领域&#xff0c;Python 是非常流行的编程语言&#xff0c;而 Pandas 是其中最重要的库之一。Pandas 提供了高效、灵活的数据结构和工具&#xff0c;专门用于处理和分析数据。对于数据分析新手来说&#xff0c;理解如何使用 Pa…

Linux数据备份

1、Linux服务器中哪些数据需要备份 1&#xff09;Linux系统重要数据&#xff1a; ①/root/目录&#xff0c;管理员家目录 ②/home/目录&#xff0c;普通用户家目录 ③/etc/目录 &#xff0c;系统重要的配置文件保存目录 2&#xff09;安装服务的数据&#xff1a;例apache①…

MySQL安装与环境配置(Windows系统 MySQL8.0.39)

目录 MySQL8.0.39工具下载安装开启方式可视化开启命令方式开启 环境配置 MySQL8.0.39 工具 系统&#xff1a;Windows 11 参考视频&#xff1a; 黑马程序员 MySQL数据库入门到精通&#xff0c;从mysql安装到mysql高级、mysql优化全囊括 P3 https://www.bilibili.com/video/BV1…