- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们在我们的一个项目中使用 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/
我是一名优秀的程序员,十分优秀!