环境变量

EMP 支持在编译过程中向代码中注入环境变量或表达式,这对于区分运行环境、替换常量值等场景很有帮助。本章节会介绍环境变量的使用方式。

默认环境变量

process.env.NODE_ENV

默认情况下,EMP 会自动设置 process.env.NODE_ENV 环境变量,在开发模式为 'development',生产模式为 'production'

你可以在 Node.js 和 client 代码中直接使用 process.env.NODE_ENV

if (process.env.NODE_ENV === 'development') {
  console.log('this is a development log');
}

在开发环境,以上代码会被编译为:

if (true) {
  console.log('this is a development log');
}

在生产环境,以上代码会被编译为:

if (false) {
  console.log('this is a development log');
}

在代码压缩过程中,if (false) { ... } 会被识别为无效代码,并被自动移除。

命令行工具中快速定义变量

可以在 npm script 中,快速添加 cli 参数来达到区分环境的目的。

-e --env

script: {
    "dev": "emp dev --env dev",
    "build": "emp build --env test",
    "build:prod": "emp build --env prod",
}

代码里面使用

if (process.env.env) {
    //...
}

-ev, --env-vars

使用 -ev key=value 或 -ev key=value -ev key=value 定义一个或多个环境变量,可以在构建时候使用这些环境变量。

单个变量

script: {
    "dev": "emp dev --env-vars showLog=true",
    "build": "emp build --env-vars showLog=false",
    "build:prod": "emp build --env-vars showLog=false",
}

多个变量

script: {
    "dev": "emp dev --env-vars showLog=true --env-vars sourceMap=true",
    "build": "emp build --env-vars showLog=false --env-vars sourceMap=true",
    "build:prod": "emp build --env-vars showLog=false --env-vars sourceMap=false",
}

在配置中使用变量

import {defineConfig} from '@empjs/cli'
export default defineConfig(store => {
    const {cliOptions} = store
    console.log('cliOptions', cliOptions.envVars)
}

执行 run dev 控制台输出

cliOptions { showLog: 'false', sourceMap: 'true' }

更多环境变量配置,请见配置