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

标签 javascript keystonejs

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

最佳答案

阅读 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"

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

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().

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

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

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

然后将其导入其他地方。

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

现在您可以轻松调试一些东西,无论将它导入到哪里,它都应该能正常工作。

关于javascript - 如何在 Keystone.js 以外的 .js 文件中使用 .env 文件变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501016/

相关文章:

javascript - 下拉菜单在移动设备上变形(Google Nexus 5)

javascript - 更改状态时延迟加载 Angular 组件脚本

node.js - 使用 LetsEncrypt 和 Heroku 配置 KeystoneJS 应用程序

javascript - 如何在 Keystone js 中添加源映射

javascript - KeystoneJS - 创建新项目抛出重复键错误

javascript - 具有内部缩放功能的 css 图片库

javascript - 出现错误时未调用 jQuery AJAX 错误回调

mongodb - 节点应用程序无法连接到我的 ubuntu 实例上的 mongo 镜像

node.js - 生产中的 KeystoneJS

javascript - 使用纯 JavaScript 检测更改的输入文本框