节点.JS-从package.json跨脚本导出env变量失败
Node.JS - Failing in export env variables across scripts from package.json
我正在创建一个节点。JS项目基于Express,我正在尝试设置环境变量,以将开发与生产流量分离。我创建了一个shell脚本文件,其中包含一些env变量,如NODE_ENV
或DEBUG
,当我在命令行上运行npm run develop
时,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"
}
// ...
}
有人知道这是最好的实践,还是有其他方法可以做到这一点?
最佳实践是避免在package.json中设置环境变量,因为这应该与环境无关,以便支持没有bash或在/usr/bin/bash
中安装了bash的环境
假设您不关心这个约束,那么实现这一点的方法是在实际运行命令中执行您的环境:
{
"scripts": {
"develop": "NODE_ENV=development NODE_DEBUG=http DEBUG=project:server node ./bin/www"
}
}
如果你不想像上面提到的那样只传递params,你总是可以这样做。
软件包.json
"scripts": {
"start": ". development.sh | node path/to/app/www"
}
在项目根目录中运行"npm-start"(也假设development.sh在您的项目根目录下)。这将执行development.shbash脚本,然后执行节点脚本。
两个注意事项:
我记得读到上面的语法可能会稍微依赖于您的操作系统/节点版本。因此,如果你遇到任何问题,都要考虑到这一点。
此外,在您的节点脚本中,环境变量将是流程对象上的键/值。这将有助于了解调试目的。
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 将process.env变量从节点传递或使用到reactjs
- 如何将ENV变量传递到脚本标记中
- 如何访问javascript中的laravel.env变量
- 将模块安装为全局变量时遇到问题 -- /usr/bin/env 不是目录
- 什么'当使用angular fullstack生成器时,在后端访问env变量的最佳方式是
- 如何在node.js中导出env变量
- 如何在npm脚本中使用env变量的值
- Node process.env 变量为空
- 用mocha测试依赖于环境变量process.env.APP_ENV的配置模块
- 在节点中的开发过程中测试ENV变量
- 节点.JS-从package.json跨脚本导出env变量失败