繁体   English   中英

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

[英]How to use .env file variable in .js file other than Keystone.js?

我们在我们的一个项目中使用 keystone 框架工作,我试图将 .env 文件变量用于我的 .js 文件之一以连接 http 站点。我使用了 dotenv 并调用了 process.env.xxyz,其中 xxyz 是变量我们正在使用。请让我知道是否有任何其他方法可以从 .env 文件中调用变量。

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

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

相反,试试我的envy模块,它可以防止您可能犯的所有常见错误。 它检查缺失的变量等。

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

  • 确保使用正确的变量名称。
  • 确保没有错别字。
  • 确保您使用正确的语法。
  • 考虑改用命令行参数 我为此推荐 另请参阅同时使用envy 和 meow的示例。

关于语法:根据您使用的加载器(例如dotenvenvy.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 ,则大小写不是问题,因为它通过在返回变量名称之前将变量名称规范化为驼峰命名来解决此问题。

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

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

另一个有助于调试并节省时间和精力的技巧是制作专用模块进行配置。 多亏了require 缓存,我们避免了多次执行工作,也避免依赖加载器是幂等的

把它放在一个名为env.js的文件中。

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

然后将其导入其他地方。

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

现在您有一些非常简单的调试方法,无论您将其导入何处,它都应该能够正常工作。

只需将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(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM