vue项目中webpack和vite配置环境变量对比

环境变量

在项目根目录中放置下列文件来指定环境变量:

sh 复制代码
.env                # 在所有的环境中被载入
.env.local          # 在所有的环境中被载入,但会被 git 忽略
.env.[mode]         # 只在指定的模式中被载入
.env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略

.env.development文件:开发环境(mode=developmen)载入的变量

.env.production文件:生产环境(mode=production)载入的变量

环境文件加载优先级

如果当前为生产环境时,.env.env.production文件具有相同的变量,则.env.production文件拥有更高的优先级。

webpack构建的vue项目

只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。你可以在应用的代码中这样访问它们:

js 复制代码
// .env文件
VUE_APP_API_URL=https://api.a.com
js 复制代码
console.log(process.env.VUE_APP_API_URL) // https://api.a.com

模式

package.json文件下的scripts执行脚本配置运行模式

json 复制代码
"scripts": {
    "serve": "vue-cli-service serve --mode developmen",
    "build": "vue-cli-service build --mode production",
    "lint": "vue-cli-service lint"
  }

vue-cli-service serve的模式默认为development;

js 复制代码
// npm run serve
console.log(process.env.NODE_ENV === 'development') // true

vue-cli-service build的模式默认为production;

js 复制代码
// npm run build
console.log(process.env.NODE_ENV === 'production') // true

自定义脚本及执行模式

json 复制代码
"scripts": {
    // ...
    "test": "vue-cli-service serve --mode test"
  }

当执行npm run test时, 会自动加载.env.test文件里的变量。

参考: vue-cli环境变量和模式官方文档

vite构建的vue项目

vite项目中的环境变量需要以VITE_开头。你可以在应用的代码中这样访问它们:

js 复制代码
// .env文件
VITE_APP_API_URL=https://api.a.com
js 复制代码
console.log(import.meta.env.VITE_APP_API_URL) // https://api.a.com

模式

package.json文件下的scripts执行脚本配置运行模式

json 复制代码
"scripts": {
    "dev": "vite --mode development",
    "build": "vite build --mode production",
    "preview": "vite preview"
  }

vite dev的模式默认为development;

js 复制代码
// npm run dev
console.log(import.meta.env.MODE === 'development') // true

vite build的模式默认为production;

js 复制代码
// npm run build
console.log(import.meta.env.MODE === 'production') // true

在vite配置文件获取环境变量

.env.development

js 复制代码
VITE_APP_TITLE=My App

vite.config.js

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

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

export default defineConfig(({mode}) => {
  // npm run dev时
  console.log('mode', mode) // development
  console.log(process.cwd())  // D:\study\vue3\env 
  // 获取对应模式下的以VITE_开头的环境变量
  const env = loadEnv(mode, process.cwd(), 'VITE_')
  console.log('env', env) // { VITE_APP_TITLE: 'My App' }
  return {
    plugins: [
      vue(),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    }
  }
})

自定义脚本及执行模式

json 复制代码
"scripts": {
    // ...
    "test": "vite --mode test"
  }

当执行npm run test时, 会自动加载.env.test文件里的变量。

参考: vite环境变量和模式官方文档

区别

webpackvite配置环境变量主要区别:

  • VUE_APP_开头和VITE_开头
  • process.env访问和import.meta.env访问
  • vite配置文件访问变量需要引入loadEnv函数
相关推荐
仰泳之鹅8 分钟前
【杂谈】使用Edge浏览器下载文件显示“Microsoft Defender SmartScreen 已阻止此不安全文件”的解决方法
前端·edge
万邦科技Lafite19 分钟前
小红书评论数据一键获取,item_reviewAPI接口讲解
大数据·前端·数据库·chrome·电商开放平台
多仔ヾ33 分钟前
Vue.js 前端开发实战之 06-Vue 路由
vue.js
meng半颗糖1 小时前
vue3+tpescript 点击按钮跳转新页面直接通过链接预览word
前端·vue.js·word
击败不可能2 小时前
vue做任务工具方法的实现
前端·javascript·vue.js
觉醒大王2 小时前
医学好投的普刊分享
前端·论文阅读·深度学习·学习·自然语言处理·学习方法
小二·2 小时前
Python Web 开发进阶实战:AI 编排引擎 —— 在 Flask + Vue 中构建低代码机器学习工作流平台
前端·人工智能·python
【赫兹威客】浩哥2 小时前
【赫兹威客】框架模板-前端bat脚本部署教程
前端·vue.js
sww_10262 小时前
智能问数系统(二):数据分析师Python
java·前端·python
一 乐3 小时前
学生宿舍管理|基于springboot + vue学生宿舍管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·助农电商系统