Nodejs egg-script 默认写死 NODE_ENV=production

发布于 1周前 作者 songsunli 来自 nodejs/Nestjs

Nodejs egg-script 默认写死 NODE_ENV=production
今天查 NODE_ENV 变量无法根据外面环境变动,测了很多遍排查了一天! egg-scrip -env=test 无法对 NODE_ENV 生效

6 回复

–env 吧,你是不是少了个 - 导致的

兄弟,暂时不想改了。地址在这里: https://github.com/eggjs/egg-scripts/blob/master/lib/cmd/start.js
egg issue 里討论的再多,都不如 Show 代码.
Model 层引用需要改为使用 EGG_SERVER_ENV 就 OK 了.egg 框架里 对 NODE_ENV 暂时不友好,不喜欢至少不要写死啊,这破坏了预期啊.已提 ISSUE
https://github.com/eggjs/egg/issues/4492

这个是赋值给 EGG_SERVER_ENV 环境变量的


1.那应该是正文笔误,egg-scrip --env=test 而不是egg-scrip -env=test ,后者少一个’-'
2.我一般通过<a target="_blank" href="http://ctx.app.config.xxx" rel="nofollow noopener">ctx.app.config.xxx</a>来获取环境变量
更多请参考官方文档: https://eggjs.org/zh-cn/basics/env.html
很多 Node.js 应用会使用 NODE_ENV 来区分运行环境,但 EGG_SERVER_ENV 区分得更加精细。一般的项目开发流程包括本地开发环境、测试环境、生产环境等,除了本地开发环境和测试环境外,其他环境可统称为服务器环境,服务器环境的 NODE_ENV 应该为 production 。而且 npm 也会使用这个变量,在应用部署的时候一般不会安装 devDependencies,所以这个值也应该为 production 。

在 Node.js 项目中,特别是使用 Egg.js 框架时,NODE_ENV 环境变量通常用于指定当前运行环境(如开发、测试、生产等)。默认将 NODE_ENV 写死在代码中(如 NODE_ENV=production)并不是一个灵活的做法,因为这限制了在不同环境下运行应用的能力。

为了更灵活地管理环境变量,建议使用环境配置文件或环境变量管理工具。以下是如何在 Egg.js 项目中动态设置 NODE_ENV 的几种方法:

  1. 使用环境变量直接启动

    NODE_ENV=development node app.js
    

    export NODE_ENV=development
    node app.js
    
  2. .env 文件中配置: 在项目根目录创建一个 .env 文件,内容如下:

    NODE_ENV=development
    

    然后,在代码中引入 dotenv 包来加载这些环境变量:

    require('dotenv').config();
    const app = require('egg').application;
    const agent = require('egg').agent;
    
  3. 使用操作系统级别的环境变量: 在某些服务器或开发环境中,可以直接在系统环境变量中设置 NODE_ENV

通过上述方法,可以灵活地根据不同环境设置 NODE_ENV,而无需在代码中硬编码。这有助于确保应用在开发、测试和生产环境中都能正确运行。

回到顶部