vite 快速入门指南

news2024/10/1 17:44:34

相关链接

  • 演示地址
  • 源码地址
  • 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 Production

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Node.js
        uses: actions/setup-node@v1
        with:
          node-version: '20'
      - run: npm install
      - run: npm run build
      - name: Deploy
        run: |
          # 使用自定义脚本或工具进行部署
          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.coloradmin.cn/o/2182841.html

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

相关文章

springboot实战学习(10)(ThreadLoacl优化获取用户详细信息接口)(重写拦截器afterCompletion()方法)

接着学习。之前的博客的进度&#xff1a;完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上、JWT令牌"的组成与使用、完成了"登录认证"&#xff08;生成与验证JWT令牌&#xff09;以及完成获取用户详细信…

【源码部署】vue项目nvm安装(Windows篇)

nvm node version manager&#xff08;node版本管理工具&#xff09; 通过将多个node 版本安装在指定路径&#xff0c;然后通过 nvm 命令切换时&#xff0c;就会切换我们环境变量中 node 命令指定的实际执行的软件路径。 使用场景&#xff1a;比如我们手上同时在做好几个项目&a…

C# HttpClient请求URL重定向后丢失Authorization认证头

搜查官方文档后发现&#xff1a; HttpWebRequest.AllowAutoRedirect Property (System.Net) | Microsoft Learn 微软提供的http类库HttpClient &#xff08;HttpWebRequest\WebClient已不推荐使用&#xff0c;用HttpClient代替&#xff09;有备注提醒&#xff1a;当使用自动重…

B站字幕提取方法

1.获取json文件内容 1.点击F12进入开发者模式&#xff0c;选择网络模块&#xff1b; 2.输入关键字&#xff0c;例如json、ai_subtitle、subtitle等&#xff1b; 3.点击视频下方的字幕功能&#xff0c;开启&#xff1b;再点击响应单元&#xff0c;复制内容&#xff1b; 2.去jso…

好玩的水表电表

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

视频——教学篇——12——定一个涨粉小目标,如何从0-10万粉?

文章目录 1、粉丝即正义。什么是粉丝价值&#xff1f;粉丝价值粉丝活跃度商业价值 2、找到账号目标和定位3、涨粉的基础是更新频率4、优质少更与良品多更的策略5、有播放却不涨粉&#xff1f;如何提高播放转粉率&#xff1f; 1、粉丝即正义。什么是粉丝价值&#xff1f; 在了解…

CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序

在当今这个瞬息万变的商业世界里&#xff0c;营销领域正经历着一场深刻的变革。传统的CMO岗位似乎在时代的浪潮中逐渐失去了它的光芒&#xff0c;CTMO正在悄然取代传统CMO的岗位。 随着营销丛林现象的出现&#xff0c;企业面临着前所未有的挑战。许多企业发现&#xff0c;那些传…

【RockyLinux 9.4】CentOS也可以用。安装教程(使用U盘,避免踩坑简略版本)

一、制作一个镜像安装盘 1.下载镜像&#xff08;本教程使用9.4版本&#xff09; 官网&#xff1a; https://rockylinux.org/zh-CN 2.使用 UltraISO&#xff0c;制作写入硬盘镜像 二、调整相关参数&#xff0c;准备进入安装流程 1.关闭 Secure Boot&#xff08;BIOS 里面关…

【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)

文章目录 从零实现 list 容器&#xff1a;细粒度剖析与代码实现前言1. list 的核心数据结构1.1节点结构分析&#xff1a; 2. 迭代器设计与实现2.1 为什么 list 需要迭代器&#xff1f;2.2 实现一个简单的迭代器2.2.1 迭代器代码实现&#xff1a;2.2.2 解释&#xff1a; 2.3 测试…

【C++打怪之路Lv5】-- 类和对象(下)

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分82)&#…

基于MTK7981平台,学习了解理解SoC上电和boot流程

当SoC芯片流片回来后&#xff0c;并不是直接通电就可以使用的。需要进行上电复位&#xff0c;然后对SoC进行配置使其进入到正常工作状态&#xff0c;然后才能运行正常的程序和任务。这是一个比较复杂的过程&#xff0c;也是在芯片设计阶段&#xff0c;SoC需要重点考虑的问题。上…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

如何确定光纤用几芯 用光纤与网线区别在哪里

光纤用几芯&#xff1f; 光纤芯数&#xff0c;主要和光纤连接的设备接口和设备的通信方式有关。一般来说&#xff0c;光纤中光芯的数量&#xff0c;为设备接口总数乘以2后&#xff0c;再加上10%&#xff5e;20&#xff05;的备用数量&#xff0c;而如果设备的通信方式有设备多…

Linux数据备份

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

新160个crackme -070-CodeFantasy-crackme

运行分析 需破解用户名和注册码点击注册无反应 PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找到关键字符串&#xff0c;进入函数 动态调试关键函数&#xff0c;逻辑&#xff1a;对Names进行sub_408A68函数加密得到v14&#xff0c;若v14与Ser…

<<迷雾>> 第5章 从逻辑学到逻辑电路(4)--或门及其符号 示例电路

info::操作说明 鼠标单击开关切换开合状态 系统中使用一个类似箭头的形状表示或门 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch05-13-or-gate.txt 原图

使用TiDB企业版Lightning导入ORC文件到TiDB

作者&#xff1a; 数据源的TiDB学习之路 原文来源&#xff1a; https://tidb.net/blog/818f84f0 TiDB Lightning 是用于从静态文件导入 TB 级数据到 TiDB 集群的工具&#xff0c;常用于 TiDB 集群的初始化数据导入。在开源社区版本中&#xff0c;TiDB Lightning 支持以下文件…

疾风大模型气象,基于大模型预测未来天气的探索

引言 天气预测一直是科学领域的重要课题&#xff0c;影响着农业、航空、交通等多个行业。传统的天气预报依赖于数值天气预报&#xff08;Numerical Weather Prediction, NWP&#xff09;模型&#xff0c;这些模型基于物理定律和历史数据来模拟大气运动。然而&#xff0c;随着数…

LUCEDA IPKISS Tutorial 74:布尔运算去掉部分图层

案例分享&#xff1a;通过布尔运算&#xff0c;将版图部分图层挖空 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 import numpy as npclass grating_coupler(i3.PCell):_name_prefix "grating_coupler"r i3.Positive…

Spring Task 2024/9/30

Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定时间自动执行某个代码逻辑。 作用&#xff1a;定时自动执行某段java代码。 cron表达式 在线Cron表达式生成器 (qqe2.com)&#x1f448;在线生成网站 入门案例 SkyApplication 启动类 package com.sky;im…