【发布时间】:2016-12-08 10:54:01
【问题描述】:
我正在创建一个基于 Express 的 Node.JS 项目,并且我正在尝试设置环境变量以将开发流程与生产流程分开。当我在命令行上运行npm run develop 时,我创建了一个带有一些环境变量(如NODE_ENV 或DEBUG)的shell 脚本文件,这些变量将由predevelop 脚本执行,但是在predevelop 完成他的操作后变量正在丢失Express 应用运行时执行并获取undefined。
这是./scripts/development.sh
#!/bin/sh
echo 'Setting up development env';
export NODE_ENV='development';
export NODE_DEBUG='http';
export DEBUG='project:server';
echo 'NODE_ENV => '$NODE_ENV;
echo 'NODE_DEBUG => '$NODE_DEBUG;
echo 'DEBUG => '$DEBUG;
exit 0;
这是我的package.json 脚本
{
// ...
"scripts": {
"predevelop": "/bin/bash ./scripts/development.sh",
"develop": "echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www"
}
// ...
}
npm run develop 的控制台输出:
┌─ [ jcorradi ] ~/Sites/pocs/project-server
└─• npm run develop
> project-server@0.0.0 predevelop /home/jcorradi/Sites/pocs/project-server
> /bin/bash ./scripts/development.sh
Setting up development env
NODE_ENV => development
NODE_DEBUG => http
DEBUG => project:server
> project-server@0.0.0 develop /home/jcorradi/Sites/pocs/project-server
> echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www
NODE_ENV =>
NODE_DEBUG =>
DEBUG =>
// From ./bin/www
NODE_ENV => undefined
NODE_DEBUG => undefined
DEBUG => undefined
有人知道这是否是最佳做法,还是有其他方法可以使这项工作发挥作用?
Obs:我已经尝试直接在 npm 脚本上设置 env var,但仍然失败。
例如:
{
// ...
"scripts": {
"predevelop": "NODE_ENV='development'; NODE_DEBUG='http'; DEBUG='project:server';",
"develop": "echo 'NODE_ENV => '$NODE_ENV && echo 'NODE_DEBUG => '$NODE_DEBUG && echo 'DEBUG => '$DEBUG; node ./bin/www"
}
// ...
}
【问题讨论】:
-
有什么原因你没有通过命令行将变量传递给节点。例如,“predevelop”:“node myScript.js pre”和“develop”:“node myScript.js dev”。然后让你的脚本处理传递给 process.argv 数组的命令行参数?
-
因为它是环境变量,而不是执行参数。例如,Express 使用 NODE_ENV 来控制缓存和日志。 DEBUG 也一样,只针对
morgamlog npm 包。
标签: javascript node.js express environment-variables