第3章 配置 Vite

1 基本配置

Vite 的配置文件 vite.config.js 是基于 JavaScript 或 TypeScript 的文件,可以使用 ES 模块语法进行导出。Vite 通过这个配置文件来调整各种构建和开发的选项。

1.1 创建配置文件

在项目根目录创建 vite.config.js 文件:

// vite.config.js
import { defineConfig } from 'vite'

export default defineConfig({
  // 基本配置项在这里
})

1.2 常用基本配置

root

指定项目的根目录(默认是当前工作目录):

export default defineConfig({
  root: 'src'
})
base

设置项目的基本公共路径(默认是 /)。当你需要将项目部署在非根目录时,调整这个参数:

export default defineConfig({
  base: '/my-app/'
})
publicDir

指定静态资源目录(默认是 public)。在这个目录中的文件会被复制到输出目录的根部:

export default defineConfig({
  publicDir: 'static'
})
cacheDir

指定缓存目录(默认是 node_modules/.vite),用于存储预构建的依赖:

export default defineConfig({
  cacheDir: '.vite-cache'
})

2 环境变量和模式

Vite 支持基于文件的环境变量配置,你可以根据不同的构建模式(如开发模式和生产模式)使用不同的环境变量。

2.1 环境变量文件

你可以在项目根目录中创建 .env 文件来定义环境变量:

# .env
VITE_APP_TITLE=My Vite App

对于特定模式的环境变量文件,可以命名为 .env.[mode]

# .env.production
VITE_APP_TITLE=My Vite App (Production)

2.2 使用环境变量

在代码中,通过 import.meta.env 访问环境变量:

console.log(import.meta.env.VITE_APP_TITLE)

2.3 环境变量的替换

Vite 会在构建时替换 import.meta.env 中的变量:

const apiUrl = import.meta.env.VITE_API_URL
fetch(apiUrl + '/endpoint')
  .then(response => response.json())
  .then(data => console.log(data))

3 配置文件解析 (vite.config.js)

3.1defineConfig

defineConfig 是 Vite 提供的一个辅助函数,用于提供类型提示和自动完成:

import { defineConfig } from 'vite'

export default defineConfig({
  // 配置项在这里
})

3.2 常见配置项

server

配置开发服务器相关的选项:

export default defineConfig({
  server: {
    host: '0.0.0.0', // 指定服务器主机名
    port: 3000,      // 指定服务器端口
    open: true,      // 自动打开浏览器
    proxy: {         // 配置代理
      '/api': {
        target: 'http://localhost:4000',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, '')
      }
    }
  }
})
build

配置构建选项:

export default defineConfig({
  build: {
    outDir: 'dist',        // 输出目录
    assetsDir: 'assets',   // 静态资源目录
    sourcemap: true,       // 生成 sourcemap 文件
    rollupOptions: {       // 自定义 Rollup 选项
      output: {
        manualChunks: {
          vendor: ['vue']
        }
      }
    }
  }
})
resolve

配置模块解析选项:

export default defineConfig({
  resolve: {
    alias: {
      '@': '/src' // 路径别名
    },
    extensions: ['.js', '.vue', '.json'] // 自动解析的扩展名
  }
})
css

配置 CSS 相关选项:

export default defineConfig({
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@/styles/variables.scss";`
      }
    },
    modules: {
      scopeBehaviour: 'local', // 配置 CSS 模块行为
      generateScopedName: '[name]__[local]___[hash:base64:5]'
    }
  }
})
plugins

配置 Vite 插件:

import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()]
})

optimizeDeps

optimizeDeps 选项用于配置依赖预构建的行为。Vite 会扫描你的项目并预构建依赖,以提高开发服务器的启动速度。

export default defineConfig({
  optimizeDeps: {
    entries: ['index.html'], // 手动指定要扫描的入口文件
    exclude: ['your-package'], // 排除不需要预构建的依赖
    include: ['another-package'] // 强制预构建某些依赖
  }
})

json

json 选项用于配置 JSON 文件的处理方式:

export default defineConfig({
  json: {
    namedExports: true, // 支持从 JSON 文件导入具名导出
    stringify: false    // 禁用自动 JSON.stringify 转换
  }
})

esbuild

esbuild 选项用于配置内部使用的 esbuild 编译器:

export default defineConfig({
  esbuild: {
    jsxFactory: 'h', // 自定义 JSX 工厂函数
    jsxFragment: 'Fragment', // 自定义 JSX 片段
    minify: true // 启用代码压缩
  }
})

logLevel

logLevel 选项用于设置日志级别:

export default defineConfig({
  logLevel: 'info' // 可选值:'info', 'warn', 'error', 'silent'
})

define

define 选项用于定义全局常量,这些常量会在打包时进行替换:

export default defineConfig({
  define: {
    __VERSION__: JSON.stringify('1.0.0')
  }
})

ssr

ssr 选项用于配置服务器端渲染(SSR)相关的选项:

export default defineConfig({
  ssr: {
    external: ['react', 'react-dom'], // 指定外部化依赖
    noExternal: ['your-package'] // 禁止外部化某些依赖
  }
})

4 命令行接口 (CLI)

Vite 提供了一些命令行工具来帮助开发和构建项目。

4.1 启动开发服务器

vite

这将启动一个开发服务器,并打开一个浏览器窗口,你可以在其中查看应用。

或者使用 npm script:

npm run dev

4.2 构建生产版本

vite build

这将构建生产版本的应用,输出到 dist 目录。

或者使用 npm script:

npm run build

4.3 预览构建结果

vite preview

这将启动一个静态文件服务器,用于预览构建结果。

或者使用 npm script:

npm run serve

4.4 CLI 选项

可以通过命令行选项覆盖配置文件中的选项。例如,指定配置文件:

vite --config ./config/vite.config.js

或者指定环境模式:

vite --mode production

4.5 命令行全局安装

你可以将 Vite 安装为全局命令,以便在任何地方使用:

npm install -g vite

安装后,你可以使用 vite 命令来创建、开发和构建项目。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络性能指标概述:速率、带宽、时延等

在计算机网络中,性能指标是衡量网络效率和质量的重要参数。本文将综合三篇关于计算机网络性能指标的文章,详细介绍速率、带宽、吞吐量、时延、时延带宽积、往返时延(RTT) 和利用率的概念及其在网络中的应用。 1. 速率(…

windows系统本地端口被占用的问题

第一步:查找所有运行的端口 按住“WindowsR”组合键,打开命令窗口,输入【cmd】命令,回车。在弹出的窗口中输入 命令【netstat -ano】,再按一下回车键 Win系统端口被占用-查找所有运行的端口 第二步:查看…

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 在历史上,我们曾经这样描…

CSS技巧:纯CSS实现文字渐变动画效果

文字渐变动画&#xff0c;可以实现的有两种&#xff1a;一种是一行文字整体变化颜色&#xff1b;另一种一行文字依次变化颜色。接下来&#xff0c;我就介绍一下这两种文字渐变的实现过程。 布局代码&#xff1a; <div class"con"><div class"animate…

GPIO配置-PIN_Speed的理解

在使用STM32的GPIO 口配置时&#xff0c;经常会疑惑应该选用什么样的配置模式&#xff0c;本文谈谈对pin_speed的理解。 根据数据手册可得&#xff0c;STM32提供10MHz,2MHz和50MHz三种输出速度的配置&#xff0c;三种配置的应用场景是怎么样的&#xff1f;。 1.为什么要配置引…

力扣双指针算法题目:快乐数

目录 1.题目 2.思路解析 3.代码展示 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 题目意思是将一个正整数上面的每一位拿出来&#xff0c;然后分别求平方&#xff0c;最后将这些数字的平方求和得到一个数字&#xff0c;如此循环&#xff0c;如果在此循环中…

OpenEarthMap:全球高分辨率土地覆盖制图的基准数据集(开源来下载!!!)

OpenEarthMap由220万段5000张航拍和卫星图像组成&#xff0c;覆盖6大洲44个国家97个地区&#xff0c;在0.25-0.5m的地面采样距离上人工标注8类土地覆盖标签。我们提供8类标注:裸地、牧场、已开发空间、道路、树木、水、农业用地和建筑。类选择与现有的具有亚米GSD的产品和基准数…

C#知识|项目的实施过程及通用三级架构的搭建笔记

哈喽,你好啊,我是雷工! 01 项目需求分析 根据与需求方沟通,分析需求,一般都有需求分析师来进行项目需求收集与分析。 根据需求文档进行项目功能设计。 02 框架的选择 ①小项目可以根据需求选择两层或三层结构。 ②中型大型项目,至少需要三层架构和其他架构的组合。 03 框…

ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验

摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗&#xff1f; 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑&#xff0c;并提供完整的项目代码和电路图&#xff0c;即使是 Ardu…

使用握手信号实现跨时钟域数据传输

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 分别编写一个数据发送模块和一个数据接收模块&#xff0c;模块的时钟信号分别为clk_a&#xff0c;clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7&#xff0c;在每个数据传输完成之后&#xf…

六、数据可视化—首页、列表页制作(爬虫及数据可视化)

六、数据可视化—首页、列表页制作&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;首页制作&#xff08;1&#xff09;创建新项目选择flask框架&#xff08;2&#xff09;下载模板&#xff08;3&#xff09;导入flask框架中进行改写&#xff08;4&#xff09;访问服务…

puppeteer 爬虫初探

1. puppeteer 和 puppeteer-core 安装 puppeteer 会默认下载一个最新版本的 chrome 浏览器&#xff1b; 安装 puppeteer-core &#xff0c;不会安装 chrome, 若要程序打开浏览器运行时&#xff0c;需手动指定电脑系统安装的 chrome 浏览器路径&#xff1b; 2. puppeteer-core …

某大会的影响力正在扩大,吞噬了整个数据库世界!

1.规模空前 你是否曾被那句“上有天堂&#xff0c;下有苏杭”所打动&#xff0c;对杭州的湖光山色心驰神往&#xff1f;7月&#xff0c;正是夏意正浓的时节&#xff0c;也是游览杭州的最佳时期。这座古典与现代交融的城市将迎来了第13届PostgreSQL中国技术大会。作为全球数据库…

禁用windows的语音识别快捷键win+ctrl+s

win11组合键winctrls会弹出语音识别提示&#xff0c;即使到设置里禁用了语音识别也没用 解决办法&#xff1a;安装PowerToys&#xff0c;通过“键盘管理器”-“重新映射快捷键”禁用 PowerToys是微软自己的工具&#xff0c;不用担心安全问题&#xff0c;下载地址&#xff1a;h…

昇思25天学习打卡营第9天|静态图模式的深度剖析与应用指南

目录 背景介绍 动态图模式 静态图模式 静态图模式的使用场景 静态图模式开启方式 基于装饰器的开启方式 基于context的开启方式 静态图的语法约束 JitConfig配置选项 静态图高级编程技巧 背景介绍 AI 编译框架主要包含两种运行模式&#xff0c;即动态图模式与静态图模…

解决GPT-4o耗电难题!DeepMind新算法训练效率提升13倍,能耗降低10倍!

目录 01 有更好的解决方案吗&#xff1f; 02 从“超级batch”中筛选数据 03 技术介绍 04 实验结果 生成可学习batch 谷歌DeepMind推出的新算法JEST&#xff0c;将LLM训练的迭代次数减少了13倍&#xff0c;计算量降低了10倍&#xff0c;有望重塑AI未来。GPT-4o早已成为耗能…

python破解字母已知但大小写未知密码

python穷举已知字符串中某个或多个字符为大写的所有情况 可以使用递归函数来实现这个功能。以下是一个示例代码&#xff1a; def generate_uppercase_combinations(s, index0, current):if index len(s):print(current)returngenerate_uppercase_combinations(s, index 1, …

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezi…

Educational Codeforces Round 167 (Rated for Div. 2)(A~C)题解

A. Catch the Coin 解题思路: 最终&#x1d465;一定会相等&#xff0c;我们考虑直接到下面接住他。 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t; ll…

【数据结构与算法】希尔排序

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​