当前位置: 首页 > news >正文

Vite 完整版详解

1. 打包构建:

Vite 使用 Rollup 作为默认的构建工具。通过运行 npm run build 命令,Vite 会将应用程序的源代码打包成一个或多个优化的静态文件,以便在生产环境中进行部署。Vite 的构建过程会根据需要进行代码拆分、压缩和优化,以提供最佳的性能和文件大小。

# package.json
{"scripts": {"build": "vite build"}
}

2. 环境变量:

Vite 支持在项目中使用环境变量。您可以在项目的根目录下创建一个 .env 文件,并在其中定义您需要的环境变量。然后,在您的代码中,可以使用 import.meta.env 对象来访问这些环境变量。Vite 会根据当前的环境自动加载相应的环境变量文件,例如 .env.development.env.production 等。

# .env
VITE_API_URL=https://api.example.com
VITE_APP_NAME=My App# main.js
console.log(import.meta.env.VITE_API_URL); // 输出:https://api.example.com
console.log(import.meta.env.VITE_APP_NAME); // 输出:My App

3. 模式:

Vite 支持两种模式:开发模式和生产模式。在开发模式下,Vite 会提供一个开发服务器,实现快速的冷启动和热重载,以便在开发过程中获得即时的反馈。在生产模式下,Vite 会对应用程序进行优化和打包,以提供更高的性能和更小的文件大小。

# package.json
{"scripts": {"dev": "vite","build": "vite build"}
}

4. 兼容老浏览器:

Vite 默认情况下不支持老版本的浏览器,因为它使用了一些现代的 JavaScript 特性和浏览器原生模块的功能。但是,您可以通过配置文件来启用对老浏览器的支持。通过设置 target 选项为 es2015,并使用 @vitejs/plugin-legacy 插件,您可以将您的应用程序转换为兼容老浏览器的代码。

# vite.config.js
import { defineConfig } from 'vite';
import legacy from '@vitejs/plugin-legacy';export default defineConfig({plugins: [legacy({targets: ['ie >= 11'],additionalLegacyPolyfills: ['regenerator-runtime/runtime']})]
});

5. TypeScript 相关:

Vite 对 TypeScript 提供了原生的支持。您可以在项目中使用 TypeScript 来编写代码,并且 Vite 会自动识别和编译 TypeScript 文件。在使用 TypeScript 的同时,您可以享受到 Vite 带来的快速的冷启动和热重载的特性。

# main.ts
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);
app.mount('#app');

6. 基本配置:

Vite 的基本配置可以通过一个名为 vite.config.js 的配置文件进行设置。在这个配置文件中,您可以自定义各种选项,例如入口文件、输出路径、插件配置等。您还可以根据需要使用不同的插件来扩展 Vite 的功能。

# vite.config.js
import { defineConfig } from 'vite';export default defineConfig({root: './src',base: '/my-app/',plugins: [],build: {outDir: '../dist',assetsDir: 'assets',sourcemap: true}
});

核心配置全集

// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import legacy from '@vitejs/plugin-legacy';
import { resolve } from 'path';export default defineConfig({root: resolve(__dirname, './src'),base: '/my-app/',build: {outDir: resolve(__dirname, './dist'),assetsDir: 'assets',sourcemap: true,rollupOptions: {external: ['axios'],output: {globals: {axios: 'axios'}}}},plugins: [vue(),legacy({targets: ['ie >= 11'],additionalLegacyPolyfills: ['regenerator-runtime/runtime']})],server: {port: 3000,proxy: {'/api': {target: 'https://api.example.com',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, '')}}}
});
  • root:指定项目的根目录路径。
  • base:指定项目的基础路径,用于指定静态资源的引用路径。
  • build:用于配置构建相关的选项,包括输出目录、静态资源目录、是否生成源映射等。
  • plugins:用于配置 Vite 插件,例如 @vitejs/plugin-vue@vitejs/plugin-legacy
  • server:用于配置开发服务器的选项,包括端口号、代理等。

此外,示例代码中还展示了一些其他的配置选项的使用:

  • rollupOptions:用于配置 Rollup 的选项,例如外部依赖和全局变量。
  • proxy:用于配置开发服务器的代理选项,用于将请求代理到其他服务器。

整体代码示例

// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';export default defineConfig({plugins: [vue()],resolve: {alias: {'@': path.resolve(__dirname, 'src')}},server: {port: 3000}
});

这是一个基本的 Vite 配置文件,包括了以下配置选项:

  • plugins:使用 @vitejs/plugin-vue 插件来支持 Vue 单文件组件。
  • resolve.alias:设置别名,将 @ 指向项目的 src 目录,方便在代码中使用绝对路径引入模块。
  • server.port:设置开发服务器的端口号为 3000。

接下来,我们可以在 src 目录下创建一个简单的 Vue 应用:

<!-- App.vue -->
<template><div><h1>Hello Vite!</h1><p>{{ message }}</p></div>
</template><script>
export default {data() {return {message: 'Welcome to Vite!'};}
};
</script><style>
h1 {color: blue;
}
</style>
// main.js
import { createApp } from 'vue';
import App from './App.vue';createApp(App).mount('#app');

在项目根目录下运行 npm install 安装依赖,然后使用 npm run dev 启动开发服务器。在浏览器中打开 http://localhost:3000,您将看到一个简单的 Vue 应用,显示 “Hello Vite!” 和 “Welcome to Vite!”。

http://www.lryc.cn/news/166505.html

相关文章:

  • AI入门指南:探索人工智能的基础原理和实际应用
  • 使用 Webpack 从 0 到 1 构建 Vue3 项目 + ts
  • 【Git】Git 分支
  • .NET Upgrade Assistant 升级 .NET MAUI
  • 记一次诡异的Cannot find declaration to go to,Cannot resolve method
  • 智慧园区:AI边缘计算技术与视频监控汇聚平台打造智慧园区解决方案
  • SpringCloud(17~21章):Alibaba入门简介、Nacos服务注册和配置中心、Sentinel实现熔断与限流、Seata处理分布式事务
  • Jmeter安装与测试
  • java开发环境从0开始 【汇总版】
  • 线性代数的本质(九)——二次型与合同
  • STM32WB55开发(4)----配置串口打印Debug调试信息
  • 云原生服务无状态(Stateless)特性的实现
  • zookeeper最基础教程
  • 又一重磅利好来袭!Zebec Payroll 集成至 Nautilus Chain 主网
  • NLP模型的tokenize方法中return_tensors参数
  • 模方新建工程时,显示空三与模型坐标系不一致怎么解决
  • 氧化锌避雷器绝缘电阻测试
  • 链动2+1系统开发
  • AIGC(生成式AI)试用 4 -- 从模糊到精确
  • Linux中使用Docker安装ElasticSearch7.10.x集群
  • electron 左上角图标 dev(开发环境)可显示 build(打包)后无法显示
  • 全球与中国BGO晶体市场:增长趋势、竞争格局与前景展望
  • 华三路由交换技术基础——计算机网络基础
  • Docker搭建RK3568开发环境
  • 【GAMES202】Real-Time Ray Tracing 1—实时光线追踪1
  • Linux修复损坏的文件系统
  • 三分钟学会一个新技能——使用Java操作Redis
  • Java学习笔记------内部类
  • 面试题:问js的forEach和map的区别
  • Hadoop设置固定ip无效的解决办法