我想问一下是否有人知道如何永久运行可以加载.env文件。
目前,如果我们永远运行启动app.js,则process.env.foo将变为未定义。
答案 0 :(得分:1)
TLDR 在底部。
以前有很多答案,但没有一个能真正解决这个特定用例。
要使用 forever 运行 dotenv,您需要做两件事。
首先我们需要使用 dotenv 的 preload 特性,这意味着我们需要永远向进程传递一个节点参数。我们可以通过使用 -c COMMAND
标志永远拥有。
第二件事与 dotenv
包的工作方式有关。这是源代码的片段:
let dotenvPath = path.resolve(process.cwd(), '.env')
process.cwd()
有什么作用?
process.cwd() 方法是 process 模块的内置应用程序编程接口,用于获取 node.js 进程的当前工作目录。
意思是 dovenv
包要从工作目录加载 .env
文件。所以为了解决这个问题,我们可以使用forever的--workingDir
标志来指定进程的实际工作目录。
最后的命令看起来像这样:(TLDR 从这里开始)
forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js
其中 app-workdir-path
是项目目录的绝对路径。
答案 1 :(得分:0)
您可以使用dotenv包来实现此目的。在您的应用输入上,执行此操作
require('dotenv').config({ path: '.env' })
答案 2 :(得分:0)
如果您在项目的根目录中添加了.env
文件,那么您可以这样使用
require('dotenv').config()
或者,如果您使用不同的位置创建了文件.env
,那么请在您的代码中使用
require('dotenv').config({path : '/your/path/.env'})
答案 3 :(得分:0)
我找到了您的问题,并且遇到了同样的问题。我认为dotenv
不会永远有效-至少不是我能够开始工作。但是,我认为您可以采用一种解决方法。我能够在forever命令之前的命令行上指定环境变量,并将这些环境变量永远传递给我的节点应用程序。
~$ ENV=production forever start yourApp.js
有关在命令行上指定环境变量的更多信息,请检查此Stack Overflow question。
答案 4 :(得分:0)
我在多服务器永久配置中遇到了这个问题。
如果在根目录中包含--workingDir
文件并使用dotenv
.env
参数
示例:
.env
放在根目录中dotenv.config()
的形式使用如果是一台服务器,则用于多服务器配置的代码:
const fs = require('fs');
const path = require('path');
let foreverConfig = [
{
uid: 'scheduledJobsServer',
append: true,
watch: true,
script: 'scheduledJobsServer.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
},
{
uid: 'mainServer',
append: true,
watch: true,
script: 'server.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
}
];
try {
fs.writeFileSync(
path.join(__dirname, '/foreverConfig.json'),
JSON.stringify(foreverConfig),
{ encoding: 'utf8' }
);
let consoleMessage = 'Init script success';
console.log('\x1b[42m%s\x1b[0m', consoleMessage);
} catch (e) {
console.log('Init script error:', e);
process.exit(1);
}
然后运行forever start foreverConfig.json
答案 5 :(得分:0)
对我有用的是指定完整路径:
require('dotenv').config({ path: '/opt/api/.env' });
答案 6 :(得分:0)
有时您必须从另一个目录调用节点脚本。例如,在运行cron作业时。这是您可以做的:
cd /path/to/script/ && /usr/bin/forever start /usr/bin/node script.js
现在将加载.env文件。