Nodejs egg-script 默认写死 NODE_ENV=production
Nodejs egg-script 默认写死 NODE_ENV=production
今天查 NODE_ENV 变量无法根据外面环境变动,测了很多遍排查了一天! egg-scrip -env=test 无法对 NODE_ENV 生效
–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
的几种方法:
-
使用环境变量直接启动:
NODE_ENV=development node app.js
或
export NODE_ENV=development node app.js
-
在
.env
文件中配置: 在项目根目录创建一个.env
文件,内容如下:NODE_ENV=development
然后,在代码中引入
dotenv
包来加载这些环境变量:require('dotenv').config(); const app = require('egg').application; const agent = require('egg').agent;
-
使用操作系统级别的环境变量: 在某些服务器或开发环境中,可以直接在系统环境变量中设置
NODE_ENV
。
通过上述方法,可以灵活地根据不同环境设置 NODE_ENV
,而无需在代码中硬编码。这有助于确保应用在开发、测试和生产环境中都能正确运行。