区分不同环境
根据启动命令
先看下项目运行时会有哪些参数
package.json
的scripts
中的命令
json
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "echo \"Error: no test specified\" && exit 1"
},
vite.config.js
文件内容
javascript
import { defineConfig } from "vite";
const config = defineConfig((...args) => {
console.log(...args)
return {};
})
export default config;
- 运行
pnpm dev
,打印如下
shell
{ mode: 'development', command: 'serve', ssrBuild: false }
- 运行
pnpm build
,打印如下
shell
{ mode: 'production', command: 'build', ssrBuild: false }
可以看到,开发环境和生产环境
mode
和command
都是不同的如果只有
开发
和生产
环境,可以通过读取command
来获取不同的配置可以和
webpack
一样,创建不同的配置文件,vite.base.config.js
、vite.dev.config.js
、vite.prod.config.js
,然后根据不同的环境启用不同的配置
vite.config.js
(伪代码)
javascript
import { defineConfig } from "vite";
import viteBaseConfig from './vite.base.config'
import viteDevConfig from './vite.dev.config'
import viteProdConfig from './vite.prod.config'
const configMap = {
'serve': () => {
console.log('serve配置')
return {
...viteBaseConfig,
...viteDevConfig
}
},
'build': () => {
console.log('build配置')
return {
...viteBaseConfig,
...viteProdConfig
}
}
}
export default defineConfig(({ command }) => {
/**
* command: 'build' | 'serve'
* 执行vite直接启动 command就是'serve'
* 执行vite build command就是'build'
*/
console.log('command', command);
return configMap[command]();
})
根据环境变量
vite
中对环境变量
的处理
TIP
- 要想让
vite
读取到环境变量
,变量必须以VITE
开头,这个规则可以通过envPrefix
配置来更改
在vite.config.js
中获取环境变量
官方文档介绍
使用
dotenv
(vite
中内置了dotenv
这个方法)读取.env
配置文件,将读取到的环境变量注入到p
中,具体过程如下:rocess.env 调用
loadEnv
方法,找到.env
文件,解析其中环境变量,并放到一个对象
中拼接传进来的
mode
变量,根据传入的参数寻找.env.${mode}
文件,解析其中环境变量,并放到一个对象中
示例
在项目根目录下添加
.env
、.env.development
、.env.production
文件修改
vite.config.js
javascript
import { defineConfig, loadEnv } from "vite";
const config = defineConfig(({ command, mode }) => {
const envConfig = loadEnv(mode, process.cwd())
console.log(`
command => ${command},
mode => ${mode},
envConfig => ${JSON.stringify(envConfig)}
`)
return {};
})
export default config;
- 使用
pnpm dev
启动项目,打印如下
shell
command => serve,
mode => development,
envConfig => {"VITE_APP_KEY":"dev"}
- 使用
pnpm build
打包项目,打印如下
shell
command => build,
mode => production,
envConfig => {"VITE_APP_KEY":"prod"}
在业务代码
中获取环境变量
不需要手动调用
loadEnv
函数读取,使用vite
内置的方法,可以只配置.env
、.env.${mode}
文件,其他交给vite
来处理如果想在自己客户端
业务代码
中获取读到的环境变量,可从i
获取mport.meta.env i
是一个对象,mport.meta.env 开发环境下
内容如下
javascript
{
BASE_URL: "/"
DEV: true
MODE: "development"
PROD: false
SSR: false
VITE_APP_KEY: "dev"
}
环境变量相关配置
envDir
,类型string
,指定环境变量文件所在的文件夹
名称,默认root
配置指定的路径envPrefix
,类型string | string[]
,指定环境变量前缀,默认VITE_
WARNING
- 不要将
envPrefix
设置为''
,这是不安全的
javascript
import { defineConfig } from "vite";
export default defineConfig({
// envDir: '', // 指定环境变量文件所在的文件夹名称,默认root配置,指定的路径
// envPrefix: 'VITE' // 指定环境变量前缀,默认VITE
})
添加其他环境
- 如果想添加一个测试环境
test
配置,可以通过修改运行时参数,修改package.json
的scripts
json
"scripts": {
"dev": "vite",
"dev:test": "vite --mode test",
"build": "vite build",
"build:test": "vite build --mode test",
"test": "echo \"Error: no test specified\" && exit 1"
},
- 运行
pnpm dev:test
shell
{ mode: 'test', command: 'serve', ssrBuild: false }
- 运行
pnpm build:test
shell
{ mode: 'test', command: 'build', ssrBuild: false }
其他
相关代码可查看environment