Skip to main content

运行环境

Node.js 应用一般通过 NODE_ENV  来获取环境变量,来满足不同环境下的不同需求。比如在 production  环境下,开启缓存,优化性能,而在 development  环境下,会打开所有的日志开关,输出详细的错误信息等等。

指定运行环境#

由于在一些情况下 NODE_ENV 会被一些工具包拦截注入,所以在 Midway 体系下,我们会根据 MIDWAY_SERVER_ENV 优先获取环境,而 NODE_ENV 作为第二优先级获取。

我们可以通过启动时增加环境变量来指定。

MIDWAY_SERVER_ENV=prod npm start                    // 第一优先级NODE_ENV=local npm start                                    // 第二优先级

在 windows 环境,我们需要使用 cross-env 模块以达到同样的效果。

cross-env MIDWAY_SERVER_ENV=prod npm start                  // 第一优先级cross-env NODE_ENV=local npm start                                  // 第二优先级

代码中获取环境#

Midway 在 app 对象上提供了 getEnv()  方法获取环境,面对不同的上层框架,Midway 都做了相应的处理,保使得在不同场景下,都拥有 getEnv()  方法。。

import { Application } from 'egg';
// process.env.MIDWAY_SERVER_ENV=prod@Provide()export class UserService {  @App()  app: Application; // 请替换为使用的上层框架
  async invoke() {    console.log(this.app.getEnv()); // prod  }}

如果 NODE_ENVMIDWAY_SERVER_ENV  都没有赋值,那么默认情况下,方法的返回值为 prod 。

info

注意,你不能直接通过 NODE_ENVMIDWAY_SERVER_ENV 来获取环境,这两个值都有可能为空,且 Midway 不会反向设置它。如需获取环境,请通过 app.getEnv() 获取其他框架提供的 API 方法获取。

常见的环境变量值#

一般来说,每个公司都有一些自己的环境变量值,下面是一些常见的环境变量值以及他们对应的说明。

说明
local本地开发环境
dev/daily/development日常开发环境
pre/prepub预生产环境
prod/production生产环境
test/unittest单元测试环境
benchmark性能测试环境

依赖注入容器中获取环境#

在依赖注入容器初始化的过程中,Midway 默认初始化了一个 EnvironmentService 服务用来解析环境,并在整个生命周期中,持续保持这个服务对象。

借助服务的 getCurrentEnvironment  方法,我们可以直接从上面获取环境值,而 app.getEnv()  方法也正是这样获取值的。

const environmentService = app.getApplicationContext().getEnvironmentService();const env = environmentService.getCurrentEnvironment();