vite.config.js 的一些常用配置你知道吗

前言

当我们进行前端开发项目的时候都需要一些构建工具,像 Webpack、Rollup、Snowpack、Vite 等构建工具,而在 Vue3 的官方文档中的创建应用例子使用了 Vite,那么问题来了,为什么在 Vue3 中大多数都会推荐使用 Vite 呢?

介绍

Vite是前端的一种构建工具,有着服务启动快、热更新迅速的特点,显著提升前端开发体验。

在项目一开始启动时,Vite 会将应用中的模块区分为 依赖源码 两类。

  • 依赖 ,使用 esbuild 进行预构建依赖,底层使用了go,大量使用了并行操作,可以充分利用CPU资源;当我们 import 导入的时候,会将所需要的内部模块全部打包起来,这样请求的时候就只需要发送一次请求就可以了。
  • 源码,Vite 以 ESM 方式提供源码,ESM的对外接口只是一种静态定义,为编译时加载,遇到模块加载命令import,就会生成一个只读引用。等脚本真正执行时,再根据这个只读引用,到被加载的那个模块内取值。由于ESM编译时就能确定模块的依赖关系,因此能够只包含要运行的代码,可以显著减少文件体积,降低浏览器压力。

从这两方面加快开发构建时的速度。

配置

当我们利用 npm init vue@latest 命令创建 vue 项目, 完成后会自动生成一个 vite.config.js 文件,该文件初始状态如下:

js 复制代码
import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [ //需要用到的插件数组
    vue(),
  ],
  resolve: { 
    alias: { // 定义项目路径别名,这样可以在引入文件时,以属性值为起点
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

接下来就挑选几个比较常用的配置来介绍下。

base

开发或生产环境服务的公共基础路径。

js 复制代码
// 部署生产环境和开发环境下的URL。
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.xxx/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xxx/admin/,则设置 baseUrl 为 /admin/。
base: VITE_APP_ENV === 'production' ? '/' : '/',

plugins

配置所需的插件数组

js 复制代码
plugins: [
    vue(),
    // ...
    AutoImport({
      // imports: ['vue', 'vue-router'],
      dts: "./auto-imports.d.ts",
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],

server

运行服务的配置

js 复制代码
server: {
	host: 'localhost',  // 启动后浏览器窗口输入地址就可以进行访问
	port: 8080, // 端口号
	open: true, //是否自动打开浏览器
	cors: true, //为开发服务器配置 CORS , 默认启用并允许任何源
	https: false, //是否支持http2 如果配置成true 会打开https://localhost:8080;
	strictPort: true, //严格的端口号,如果true,端口号被占用时会直接退出
	hmr: true, // 开启热更新
	proxy: { // 反向代理配置
    '/api': {
        // 配置接口调用目标地址
        target: 'https://www.xxxx.com',
        // 当进行代理时,在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
        changeOrigin: true,
        // 替换target中的请求地址,请求时以 /api 开头
        rewrite: path => path.replace(/^\/api/, ''),
        }
   }
},

resolve

js 复制代码
resolve: {
    // 定义项目路径别名,这样可以在引入文件时,以属性值为起点。
    // 例如你 import 导入使用的时候 from 的路径就可以更改成 `@/view/home `
    alias: {
      '@': resolve(__dirname, 'src'),
    },
    // import 导入时想要省略的扩展名列表
    extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
  }

build

打包配置

js 复制代码
build: {
    // 最终构建的浏览器兼容目标,类型:string | string[]
    target: '',
    //指定输出路径
    outDir: "dist",
    //生成静态资源的存放的路径
    assetsDir: "assets",
    // 设置资源阈值,小于该值将内联为 base64 编码,避免额外的 http 请求
    assetsInlineLimit: 4096,
    //启用/禁用 CSS 代码拆分,如果有设置build.lib,build.cssCodeSplit 会默认为 false,
    //false 的话会将项目中的所以 css 提取到一个 css 文件中
    cssCodeSplit: true,
    // 构建后是否生成 source map 文件, boolean | 'inline' | 'hidden'
    sourcemap: false,
    //自定义底层的 Rollup 打包配置
    rollupOptions: {
      // 可以配置多个,表示多入口
      input: {
        index: resolve(__dirname, "index.html")
      },
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: "static/js/[name]-[hash].js",
        assetFileNames: "static/[ext]/name-[hash].[ext]"
      }
    },
    // 禁用将构建后的文件写入磁盘
    write: false,
    //默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录。
    emptyOutDir: true,
    //chunk 大小警告的限制
    chunkSizeWarningLimit: 500
  }
相关推荐
有梦想的刺儿15 分钟前
webWorker基本用法
前端·javascript·vue.js
cy玩具36 分钟前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161771 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test2 小时前
js下载excel示例demo
前端·javascript·excel
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事2 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶2 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo2 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v2 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫2 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web