【vite】vite配置文件 vite.config.js

文章目录

    • 声明环境变量配置文件
      • `.env.dev`开发环境
      • `.env.prod`生产环境
    • 在配置中使用环境变量
    • Vite 中的 plugin 配置
      • @vitejs/plugin-vue:默认插件
      • @vitejs/plugin-legacy:兼容旧版浏览器
      • unplugin-auto-import/vite:自动导入Vue和Vue相关库的API
      • unplugin-vue-components/vite:自动注册Vue组件
    • Vite 中的 resolve 配置
    • Vite 中的 css 配置
      • 常见的 `css` 选项
    • Vite 中的 server 配置
      • 代理的原理
      • 在 `vite.config.js` 中进行代理配置:
    • Vite 中的 build 配置

声明环境变量配置文件

在根目录下新建文件 .env.dev以及 .env.prod环境变量配置文件。

.env.dev开发环境

# 变量必须以 VITE_ 为前缀才能暴露给外部读取
VITE_BASE_PATH = 'https://vitejs.dev.cn/'

.env.prod生产环境

# 变量必须以 VITE_ 为前缀才能暴露给外部读取
VITE_BASE_PATH = 'https://vitejs.prod.cn/'

在配置中使用环境变量

配置 Vite | Vite 官方中文文档

环境变量通常可以从 process.env 获得。

注意 Vite 默认是不加载 .env 文件的,因为这些文件需要在执行完 Vite 配置后才能确定加载哪一个,举个例子,rootenvDir 选项会影响加载行为。不过当你的确需要时,你可以使用 Vite 导出的 loadEnv 函数来加载指定的 .env 文件。

import { defineConfig, loadEnv } from 'vite'export default ({ mode }) => {// 根据当前工作目录中的 `mode` 加载 .env 文件const env = loadEnv(mode, process.cwd())return defineConfig({base: env.VITE_BASE_PATH,})
}
  • loadEnv函数:根据传入的mode参数,找到并读取对应的环境配置文件(如.env.dev.env.prod等)中的环境变量,然后将这些变量 解析成一个对象 ,并将这个对象赋值给env常量,使得这些环境变量可以在当前进程中使用(如env.VITE_BASE_PATH)。
  • mode:通常是一个字符串,表示当前的环境模式,比如developmentproduction等。这个参数用于指定从哪个环境配置文件中加载变量。
  • process.cwd()process对象的一个方法,返回Node.js进程的当前工作目录。这个参数用于指定环境配置文件所在的目录。同**__dirname**的值相同。

如果要使用 dev 环境,就要在package.json里添加配置,比如:

  "scripts": {"dev": "vite --mode dev","build:dev": "vite build --mode dev","build:prod": "vite build --mode prod","preview": "vite preview",},

Vite 中的 plugin 配置

Vite提供的官方插件

@vitejs/plugin-vue:默认插件

默认配置只有 vue 插件,当有其他需求时,需要自行导入其他插件;

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/
export default defineConfig(({ mode}) => {const env = loadEnv(mode, process.cwd());return {plugins:[vue()] // 默认配置vue插件};
})

@vitejs/plugin-legacy:兼容旧版浏览器

新代码无法兼容旧版浏览器

在使用 Vite 开发时,默认情况下仅处理语法转译,不包含任何 polyfill。这对于较低版本的浏览器来说,可能会导致它们无法支持 ES6 的语法和新 API,如 ProxySymbolPromise 等。为了解决这个问题,我们可以使用 @vitejs/plugin-legacy 插件。

作用

这个插件可以自动生成兼容旧版浏览器的代码块,并提供所需的 polyfill(补丁),使得不支持原生 ESM 的浏览器能够按需加载这些代码

在项目中安装插件:npm install @vitejs/plugin-legacy --save-dev

–save-dev 等价于 -D , --save 可省略

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import legacy from '@vitejs/plugin-legacy'export default ({ mode }) => {const env = loadEnv(mode, process.cwd())return defineConfig({plugins: [vue(),legacy({targets: ['defaults', 'ie >= 11', 'chrome 52'],  // 需要兼容的目标列表,可以设置多个additionalLegacyPolyfills: ['regenerator-runtime/runtime'], // 需要加载的额外旧版浏览器兼容性补丁renderLegacyChunks:true, // 是否需要为旧版浏览器渲染额外的代码块polyfills:['es.symbol','es.array.filter','es.promise','es.promise.finally','es/map','es/set','es.array.for-each','es.object.define-properties','es.object.define-property','es.object.get-own-property-descriptor','es.object.get-own-property-descriptors','es.object.keys','es.object.to-string','web.dom-collections.for-each','esnext.global-this','esnext.string.match-all']})]})
})

renderLegacyChunks: 启用后,Vite 会为不支持现代 JavaScript 特性的浏览器生成特定代码块,确保它们能够正常加载和运行应用程序。

比如说,对于一些较旧版本的浏览器,它们可能无法理解和运行现代的 ES6 语法或某些新的 JavaScript API。为了让这些浏览器也能正常显示和运行应用程序,Vite 会创建专门针对它们的代码块,这些代码块经过了适当的转换和处理,以适应这些浏览器的能力。

unplugin-auto-import/vite:自动导入Vue和Vue相关库的API

在项目中安装插件:npm install unplugin-auto-import --save-dev

–save-dev 等价于 -D , --save 可省略

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite' // 导入按需自动加载API插件// https://vitejs.dev/config/
export default defineConfig(({ mode}) => {const env = loadEnv(mode, process.cwd()); return {plugins:[vue(), // 默认配置vue插件AutoImport({ imports: ["vue", "vue-router"] }), // 配置vue、vue-router的API自动加载]}
})

上面配置成功后,vue3组件中就不需要再手动书写 import 语句引入 vue3 API,可直接在页面中书写 vue3 API,并且控制台不会报错,不会影响页面渲染

unplugin-vue-components/vite:自动注册Vue组件

在项目中安装插件:npm install unplugin-vue-components --save-dev

常用于组件库的自动导入

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // 自动引入对应的组件样式
// import { VantResolver } from '@vant/auto-import-resolver' // 自动引入对应的组件样式// https://vitejs.dev/config/
export default defineConfig(({ mode}) => {const env = loadEnv(mode, process.cwd());return {plugins:[vue(), // 默认配置vue插件AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),/*AutoImport({resolvers: [VantResolver()],}),Components({resolvers: [VantResolver()],}),*/]}
})

Vite 中的 resolve 配置

import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import { fileURLToPath, URL } from 'node:url'// https://vitejs.dev/config/
export default defineConfig(({ mode}) => {const env = loadEnv(mode, process.cwd());return {resolve:{ // 设置模块如何被解析alias: {// 第一种方式(最简洁)'@': path.resolve(__dirname, './src'),// 第二种方式'@style': fileURLToPath(new URL('./src/assets/style', import.meta.url)),'@images': fileURLToPath(new URL('./src/assets/images', import.meta.url)),},// 在导入模块时可以省略的文件扩展名。隐式导入越多,解析路径所需的时间就越多。所以最好明确导入路径// 选项默认为 ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']}}
})

共享选项 | Vite 官方中文文档:resolve.extensions

导入时想要省略的扩展名列表。注意, 建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持。

Vite 中的 css 配置

在项目中安装插件:npm i -D postcss-pxtorem

import { defineConfig, loadEnv } from 'vite'
import postCssPxToRem from 'postcss-pxtorem' // 将 px 值转换成 rem 值,行内样式中的px不会被转化为rem// https://vitejs.dev/config/
export default defineConfig(({ mode}) => {const env = loadEnv(mode, process.cwd()); return {css:{devSourcemap: true, // 可以查看 CSS 的源码postcss: {plugins: [postCssPxToRem({rootValue: 37.5, 	// 1rem的大小/*// 当UI设计稿的全屏基准宽度是750px时 此处设置的值为75 但项目中使用了vant组件库 vant的设计稿总宽度是375px 其十分之一应是37.5(需要区分设置)rootValue ({ file }) {return file.indexOf('vant') !== -1 ? 37.5 : 75},*/propList: ['*'], 			// 需要转换的属性,*代表全部转换// 若想设置部分样式不转化 可以在配置项中写出// eg: 除 border和font-size外 所有px均转化为rem// propList: ["*", "!border","!font-size"], }),// 其他插件]}}}
})

常见的 css 选项

  1. preprocessorOptions:用于配置预处理器(如 Sass、Less、Stylus 等)的选项。例如,你可以在这里配置 Sass 的全局变量、mixin 等。
import { defineConfig } from 'vite';export default defineConfig({css: {preprocessorOptions: {less: {// 启用严格模式math: 'strict',// 启用 JavaScript 表达式javascriptEnabled: true,// 导入变量文件additionalData: `@import "${path.resolve('src/styles/variables.less')}";`}}}
});import { defineConfig } from 'vite';export default defineConfig({css: {preprocessorOptions: {scss: {// 导入变量文件'additionalData': `@import "${path.resolve('src/styles/variables.scss')}";`}}}
});在 Sass 和 Less 预处理器中,`math``javascriptEnabled` 并不是默认的配置选项。它们是特定于某些预处理器插件(如 `sass-loader``less-loader`)的配置选项。- `math`:这个选项用于配置 Sass 的数学运算模式。默认情况下,Sass 会尽可能地简化数学表达式,例如 `1px + 2px` 会被简化为 `3px`。如果你希望 Sass 按照数学规则进行精确计算,而不进行任何简化,你可以设置 `math: 'strict'`- `javascriptEnabled`:这个选项用于启用或禁用 Sass 中的 JavaScript 表达式。默认情况下,Sass 会禁用 JavaScript 表达式,以防止潜在的安全风险。如果你希望启用 JavaScript 表达式,你可以设置 `javascriptEnabled: true`
  1. postcss:用于配置 PostCSS 的选项。例如,你可以在这里添加 PostCSS 插件,如 autoprefixerpostcss-pxtorem 等。
css: {postcss: {plugins: [require('autoprefixer'),require('postcss-pxtorem')({rootValue: 16,propList: ['*'],selectorBlackList: ['.ignore', '.hairlines']})]}
}
  1. modules:用于配置 CSS Modules。你可以在这里设置 CSS Modules 的行为,如是否使用局部作用域、是否生成 JSON 文件等。
css: {modules: {scopeBehavior: 'local',globalModulePaths: [/global\.css$/],generateScopedName: '[name]__[local]___[hash:base64:5]'}
}- scopeBehaviour:决定 CSS 是默认作用于局部还是全局。可选值为 local(局部,默认值)和 global(全局)。- globalModulePaths:可以通过正则表达式指定哪些文件不参与模块化处理。- generateScopedName:定义生成类名的规则。默认情况下是 [hash:base64],你可以自定义为更易读的格式,例如 [name]__[local]___[hash:base64:5]
  1. devSourcemap:用于配置开发环境下的 CSS Source Map。默认为 false
css: {devSourcemap: true
}

Vite 中的 server 配置

代理的原理

在开发环境中,使用代理可以有效解决跨域问题,代理的工作原理如下:

  1. 请求转发:客户端将请求发送到代理服务器,代理服务器将其转发给目标服务器。
  2. 响应转发:目标服务器处理请求后,将响应返回给代理服务器,随后代理再返回给客户端。
  3. 中间处理:代理服务器可以在请求和响应过程中进行额外处理,如修改请求头、添加身份验证信息和缓存响应。

vite.config.js 中进行代理配置:

export default {server: {open: true,port: 8080, // 代理服务器是运行在http://localhost:8080上的开发服务器。hmr: true,headers: { Connection: 'keep-alive' }, // 设置HTTP请求头。在这l,设置了Connection: 'keep-alive',表示保持连接活跃。proxy: {'/apiProxy': { target: 'http://服务器地址:端口号', // 目标服务器changeOrigin: true, // 允许跨域。它修改了HTTP请求头中的Origin字段,使其与目标服务器的主机名和端口匹配,从而绕过了浏览器的同源策略限制。headers: { Connection: 'keep-alive' }, // 为代理请求设置 HTTP 头部信息,这里设置了Connection: 'keep-alive',表示保持连接活跃。ws: true, // 开启 websockets 代理secure: false, // 验证 SSL 证书rewrite: (path) => path.replace(/^\/apiProxy/, '') // 重写请求路径,将/apiProxy前缀去掉,使请求直接发送到目标服务器。}}}
}

WebSocket 代理: WebSocket 是一种在单个TCP连接上进行全双工通信的协议。它允许服务器和客户端之间进行实时、双向的数据交换。与HTTP不同,WebSocket连接一旦建立,就可以在客户端和服务器之间进行持续的、低延迟的数据传输。适合需要即时交互的应用。

全双工通信:是一种通信模式,允许数据在两个方向上同时进行传输,即数据可以在同一时间点在两个方向上同时发送和接收。

Vite 中的 build 配置

import { defineConfig } from 'vite';export default defineConfig({// 构建选项build: {// 构建输出目录,默认为 'dist',可省略outDir: 'dist',// 静态资源目录,默认为 'assets',可省略assetsDir: 'assets',// 构建目标(浏览器版本),默认为根据项目依赖自动推断target: 'es2015',// 是否生成 Source Map,默认为开发环境下为 true,生产环境下为 false,可省略sourcemap: true,// 是否压缩输出文件,boolean | 'terser' | 'esbuild',客户端构建默认为'esbuild',SSR构建默认为 falseminify: 'esbuild',// 启用/禁用 CSS 代码拆分,默认为true,如果禁用,整个项目中的所有 CSS 将被提取到一个 CSS 文件中。cssCodeSplit: 'false'// Rollup 选项rollupOptions: {// 入口文件,默认为 'src/main.js'input: 'src/main.js',// 输出选项output: {// 输出目录,默认为 'dist'dir: 'dist',// 输出格式(esm、cjs、iife、umd、system),默认为 'es'format: 'es',// 全局变量,用于将库暴露为全局变量globals: {vue: 'Vue'}}}}
});

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

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

相关文章

一个完整的产品级物联网系统在农业领域的应用,通过传感器、通信、云计算和控制设备的协同工作,实现了智能化的农业灌溉管理

以下为您详细介绍一个智能农业灌溉系统作为产品级的物联网实际案例: **一、项目背景** 随着农业现代化的发展,精准灌溉对于提高农作物产量、节约水资源具有重要意义。传统的灌溉方式往往依赖人工经验,效率低下且浪费水资源。因此&#xff0c…

JeecgBoot入门

最近在了解低代码平台,其中关注到gitee上开源项目JeecgBoot,JeecgBoot官方也有比较完整的入门教学文档,这里我们将耕者官方教程学习,并将其记录下来。 一、项目简介 JeecgBoot 是一款基于代码生成器的低代码开发平台拥有零代码能力…

qt QEvent详解

1、概述 QEvent是Qt框架中事件机制的基础类。在Qt中,事件是由底层窗口系统(如Windows、Linux的X11、macOS的Cocoa等)生成的,Qt的主事件循环(QCoreApplication::exec())负责从事件队列中获取这些事件&#…

#Jest进阶知识:整合 webpack 综合练习

这一小节,我们来做一个综合的练习,该练习会整合: typescriptwebpackjest 准备工作 首先创建项目目录,通过 npm init -y 进行初始化。 整个项目我们打算使用 typescript 进行开发,因此需要安装 typescript npm i t…

【安卓13 源码】Input子系统(4)- InputReader 数据处理

1. 多指触控协议 多指触控协议有 2 种: > A类: 处理无关联的接触: 用于直接发送原始数据; > B类: 处理跟踪识别类的接触: 通过事件slot发送相关联的独立接触更新。 B协议可以使用一个ID来标识触点&…

VMware 虚拟机使用教程及 Kali Linux 安装指南

VMware 虚拟机使用教程及 Kali Linux 安装指南 在现代计算机科学与网络安全领域,虚拟化技术的应用越来越广泛。VMware 是一款功能强大的虚拟化软件,可以帮助用户在同一台物理机上运行多个操作系统。本文将详细介绍如何使用 VMware 虚拟机,并…

工业通信网关的各项功能解析-天拓四方

在工业自动化和智能制造的浪潮中,工业通信网关作为连接工业现场与互联网的重要桥梁,发挥着至关重要的作用。它不仅实现了不同网络协议之间的转换,还在数据采集、设备控制、网络管理等方面展现出强大的功能。 一、协议转换功能 工业通信网关…

用Python打造媒体管理播放器:从零到全功能GUI应用

背景 在日常生活中,我们经常需要管理和播放大量媒体文件。市面上的音频播放器可能功能单一,或者界面复杂。作为一名程序员,我决定使用Python自己打造一个简单yet强大的媒体管理播放器。 C:\pythoncode\new\playsong.py 全部代码 import os…

ubuntu 20.04 安装使用 nvidia gdrcopy

1,预备环境 首先安装 nvidia display driver ,cuda toolkit 其次安装依赖工具 sudo apt install build-essential devscripts debhelper fakeroot pkg-config dkms 2,下载源码 git clone --recursive https://github.com/NVIDIA/gdrcopy.…

MongoDB简介

一.MongoDB相关概念 1.1.简介 MongoDB是一个开源,高性能,无模式的文档性数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系数据库。 它支持的…

Socket篇(学习前言)

目录 一、计算机网络 二、网络编程 三、网络编程三要素 1. IP地址 1.1. 简介 1.2. IP地址分为两大类 IPv4 IPv6 1.3. IP地址形式 1.4. DOS常用命令 1.5. 特殊IP地址 2. 端口 2.1. 简介 2.2. 端口号 2.3. 端口类型 周知端口 注册端口 动态端口 3. 协议 3.1. …

【专题】基于服务的体系结构

对于面向服务的体系结构(Service-Oriented Architecture,SOA)的几种定义: W3C:SOA是一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

问题 折磨的开始是天下苦黄狗久矣,为了不再被讨乞丐的显存恶心,一怒之下购入了AMD显卡(20GB显存确实爽 头一天就跑了3dmark验机,完美通过,玩游戏也没毛病 但是呢这厮是一点不省心,玩游戏没问题&#xff0c…

小容器拉动大市场 全面云原生化刻不容缓

毋庸置疑,容器技术的发展推动了云原生计算革命。当前,在云原生已经成为企业用云新常态的情况下,作为一项核心能力,容器管理与服务也成了检验云服务商的试金石。Omdia最新发布的《Omdia Universe: Cloud Container Management &…

一招帮你搞懂数据结构的插入、删除

目录 一、尾部插入(添加) 1.初始化 2.一个打印数组的函数 3.尾插 4.完整版 二、任意位置插入 1.流程图 2.任意插 3.完整版 三、指定数据删除 1.流程图 2. 删除(首位查找到的元素) 四、删除所有 思想 代码 五、有序…

二叉树相关算法

满二叉树:每层都是满的 完全二叉树:特殊的满二叉树,可以有一个子节点,但最后一层必须是从左到右排列,中间不能有空隙,强调除了最后一层外,其他层都是满的 一、dfs深度搜索 例题:求…

Sigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导

SSigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导 Sigrity Power SI的VR noise Metrics check模式本质上是用来评估和观测器件的电源网络的耦合对于信号的影响,输出S参数以及列出具体的贡献值。 以下图为例

OpenGL入门004——使用EBO绘制矩形

本节将利用EBO来绘制矩形 文章目录 一些概念EBO 实战简介utilswindowFactory.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 EBO 概述: Element Buffer Object 用于存储顶点的索引数据,以便在绘制图形时可以重用顶点数…

Qt 视口和窗口

Qt 视口和窗口 1、视口和窗口的定义与原理 绘图设备的物理坐标是基本的坐标系,通过 QPainter 的平移、旋转等变换可以得到更容易操作的逻辑坐标。 为了实现更方便的坐标,QPainter 还提供了视口 (Viewport)和窗口 (Window)坐标系,通过Q…

hunyuan-DiT模型部署指南

一、介绍 Hunyuan-DiT是由腾讯混元推出的扩散模型,支持中文和英文双语输入,其他开源模型相比,Hunyuan-DiT 在中文到图像生成方面树立了新的水平。 二、部署流程 环境要求: 所需的最小 GPU 内存为 11GB, 建议使用具…