如何将环境变量存储在.env文件到从shell脚本运行的节点脚本?



我正在尝试从MAC中的shell脚本运行node js脚本。

#!bin/bash
/usr/local/bin/node /opt/myprojects/instabot/index.js

它工作得很好,但问题是当我尝试读取环境变量时,它们显示为undefined,我使用dotenv包在node js脚本中使用。env文件传递环境变量(当我直接使用node index.js运行时,我可以正确读取环境变量)

使用此配置dotenv包require('dotenv').config()

。env文件是KEY=VALUE格式

如果可能的话,尝试将该bash文件移动到与index.js文件相同的目录中,它将工作。否则,您需要export环境变量,您可以通过编辑.bashrc文件永久地做到这一点,或者临时使用export foo=bar

命令

需要注入环境变量。手动执行的方法是

USER_ID=239482 USER_KEY=foobar node index.js

但是你已经有了一个。env文件,每次这样做都很痛苦。需要注入.env中的环境变量。下面的bash脚本做到了这一点,确保bash脚本在目录层次结构中与index.js处于同一级别。当你想要启动项目时,只需运行脚本。

#!bin/bash
set -euo pipefail
scriptPath="$( cd "$(dirname "$0")" || true ; pwd -P)"
fail() {
echo "ERROR: $*" > /dev/stderr
exit 1
}
insertDotEnvVars() {
insertEnvFileAndRun "$scriptPath/.env" "$@"
}
insertEnvFileAndRun() {
local envFile="$1"; shift
[[ -f "$envFile" ]] || fail "${envFile} env file not found"
env $(cat $envFile | sed 's/r$//'| xargs) "$@"
}
echo "Starting app"
insertDotEnvVars /usr/local/bin/node "$scriptPath/index.js" 

现在,如果您将此脚本保存为run.sh,那么您可以轻松地通过./run.sh运行或更新软件包。使用这个bash文件进行启动。然后输入npm run start

您应该以这种方式在utf-8中编码以工作.env文件:

const path = require('path');
const dotenv = require('dotenv');
const fs=require('fs');
const configPath = path.join(__dirname, 'config.env');
dotenv.config({ path: configPath });
fs.readFileSync(configPath, 'utf8');

相关内容

  • 没有找到相关文章

最新更新