如何在 Keystone.js 以外的 .js 文件中使用 .env 文件变量?
How to use .env file variable in .js file other than Keystone.js?
我们在我们的一个项目中使用 keystone 框架工作,我正在尝试将 .env 文件变量用于我的 .js 文件之一以连接 http site.I 使用了 dotenv 并调用了 process.env.xxyz 其中 xxyz 是我们的变量 using.Please 让我知道是否有任何其他方法可以从 .env 文件调用变量。
阅读process.env
是检索环境变量的标准方法。参见 the docs。
您提到的 dotenv
包将您的 .env
文件中的内容放入 process.env
中。但是没有校验,所以很容易出错
相反,试试我的 envy 模块,它可以防止您可能犯的所有常见错误。它会检查缺失变量等。
如果 .env
个文件仍然给您带来麻烦:
- 确保您使用了正确的变量名。
- 确保没有拼写错误。
- 确保您使用了正确的语法。
- 考虑使用 command line arguments instead. I recommend meow for this. Also see an example of using envy and meow together。
关于语法:根据您使用的加载程序(例如 dotenv
与 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
,大小写不是问题,因为它通过在 return 之前将变量名称规范化为驼峰式来解决这个问题。
const { myVar } = envy(); // correct, no matter how it is in `.env`
无论您使用哪个加载器,您当然需要在读取 .env
文件之前调用其加载函数。使用 envy()
几乎不可能忘记这一点,因为您只使用 它的直接 return 值。但是,如果您使用 dotenv
,您可能会在错误的时间轻松访问 process.env
,因为它在调用 dotenv.config()
.[= 之前已经可用并已填充(但没有包含所有所需的属性) 36=]
另一个有助于调试并节省时间和精力的技巧是制作专用模块进行配置。感谢 require cache, we avoid doing the work multiple times and also avoid relying upon the loader being idempotent.
将其放入名为 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();
我们在我们的一个项目中使用 keystone 框架工作,我正在尝试将 .env 文件变量用于我的 .js 文件之一以连接 http site.I 使用了 dotenv 并调用了 process.env.xxyz 其中 xxyz 是我们的变量 using.Please 让我知道是否有任何其他方法可以从 .env 文件调用变量。
阅读process.env
是检索环境变量的标准方法。参见 the docs。
您提到的 dotenv
包将您的 .env
文件中的内容放入 process.env
中。但是没有校验,所以很容易出错
相反,试试我的 envy 模块,它可以防止您可能犯的所有常见错误。它会检查缺失变量等。
如果 .env
个文件仍然给您带来麻烦:
- 确保您使用了正确的变量名。
- 确保没有拼写错误。
- 确保您使用了正确的语法。
- 考虑使用 command line arguments instead. I recommend meow for this. Also see an example of using envy and meow together。
关于语法:根据您使用的加载程序(例如 dotenv
与 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
,大小写不是问题,因为它通过在 return 之前将变量名称规范化为驼峰式来解决这个问题。
const { myVar } = envy(); // correct, no matter how it is in `.env`
无论您使用哪个加载器,您当然需要在读取 .env
文件之前调用其加载函数。使用 envy()
几乎不可能忘记这一点,因为您只使用 它的直接 return 值。但是,如果您使用 dotenv
,您可能会在错误的时间轻松访问 process.env
,因为它在调用 dotenv.config()
.[= 之前已经可用并已填充(但没有包含所有所需的属性) 36=]
另一个有助于调试并节省时间和精力的技巧是制作专用模块进行配置。感谢 require cache, we avoid doing the work multiple times and also avoid relying upon the loader being idempotent.
将其放入名为 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();