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函数
相关推荐
x***3816几秒前
Go-Gin Web 框架完整教程
前端·golang·gin
晓得迷路了6 分钟前
栗子前端技术周刊第 108 期 - npm 沙虫攻击 2.0、Ant Design 6.0、Playwright 1.57...
前端·javascript·css
执笔论英雄10 分钟前
【RL】async原理
java·服务器·前端
kirk_wang10 分钟前
Flutter 桌面/Web 开发:用 MouseRegion 打造原生级交互体验
前端·flutter·交互
西洼工作室19 分钟前
原生js实现前端国际化
前端·javascript
aha-凯心20 分钟前
React 中没有 v-model,如何优雅地处理表单输入
前端·javascript·vue.js·react.js
lcc18723 分钟前
Vue3 其它Composition API
前端·vue.js
tsumikistep23 分钟前
【前后端】Vue 基本使用方式(下)—— 条件渲染、双向绑定、事件绑定
前端·javascript·vue.js
雨雨雨雨雨别下啦25 分钟前
【从0开始学前端】TypeScript语法总结
前端·typescript
敲敲了个代码35 分钟前
一天面了6个前端开发,水平真的令人堪忧啊
前端·javascript·学习·面试·webpack·typescript·前端框架