如何在Keystone.js以外的.js文件中使用.env文件变量?

时间:2017-01-06 07:31:09

标签: javascript keystonejs

我们正在我们的一个项目中使用keystone框架工作,我正在尝试将.env文件变量用于我的.js文件之一以连接http site.I已使用dotenv并调用process.env.xxyz其中xxyz是我们正在使用的变量。如果有任何其他方法从.env文件中调用变量,请告诉我。

2 个答案:

答案 0 :(得分:3)

阅读process.env是检索环境变量的标准方法。请参阅the docs

您提到的dotenv软件包会使用.env文件中的内容并将其放入process.env。但是,没有进行验证,因此很容易出错。

相反,请尝试我的envy模块,以防止您可能遇到的所有常见错误。除其他外,它会检查缺失的变量。

如果.env文件仍然给您带来麻烦:

关于语法:取决于您使用的加载程序(例如dotenv vs envy),.env文件中的语法可能会对其解析方式产生重大影响。例如,在Bash和其他shell(文件所基于的)中,以下每个示例的行为都完全不同......

MY_VAR=foo $BAR
MY_VAR='foo $BAR'
MY_VAR="foo $BAR"

此外,环境变量名称区分大小写,按照惯例都是大写的。这可能导致语言中的错误,这种情况并不常见。在Node.js程序中读取process.env,有时您可能会忘记环境变量的命名约定与程序的其余部分不同。

const myVar = process.env.myVar;   // wrong
const myVar = process.env.MY_VAR;  // correct

如果使用envy,套管不是问题,因为它通过在返回它们之前将变量名称规范化为camelcase来解决此问题。

const { myVar } = envy();  // correct, no matter how it is in `.env`

无论您使用哪种加载器,您都需要在读取.env文件之前调用其加载函数。使用envy()几乎不可能忘记这一点,因为您只使用 它的直接返回值。但是,如果您使用dotenv,则可以在错误的时间轻松访问process.env,因为它在调用dotenv.config()之前已经可用并已填充(但未包含所有所需的属性)。

另一个有助于调试并节省时间和精力的技巧是制作专用模块进行配置。感谢require cache,我们避免多次执行此工作,并避免依赖于idempotent加载程序。

将其放在名为env.js的文件中。

const envy = require('envy');
module.exports = envy();

然后将其导入其他地方。

const env = require('./env');

现在你有一些非常简单的调试方法,无论你在哪里导入它都应该是一样的。

答案 1 :(得分:2)

只需将 xxyz = HTTPSiteAddress 添加到.env文件即可。然后,您可以使用process.env.xxyz在任何位置调用变量。

例如:

var request = require("request");

request(process.env.xxyz, function(error, response, body) {
  console.log(body);
});

只要你的keystone.js文件包含在顶部,这将有效:

require('dotenv').config();