对于 Node.js,如果 dotenv 未包含在 app.js 之外的其他文件中,为什么它会触发错误?

With Node.js why might dotenv trigger an error if it is not included in additional files besides app.js?

环境: Node.js,dotenv

require('dotenv').config() 通常只在主文件中需要,例如 app.js。通过该调用 process.env 可以在应用程序的每个文件中引用。这个答案同意,

然而,我只是 运行 在一个实例中,如果我不在附加文件中包含 require('dotenv').config(),我会收到一个错误,我不确定为什么。

简化示例:

app.js

const path = require('path');

// Custom path to .env file.
require('dotenv').config({ path: path.join(__dirname, '/models/.env')});

const middlewareFile = require('./controllers/middleware-file');

中间件-file.js

const USPS = require('usps-webtools-promise').default;

const usps = new USPS({
    userId: process.env.USPS_USER_ID,
    properCase: Boolean
});

usps-webtools-promise 似乎是触发错误的模块。

如果我不在中间件顶部包含 dotenv 引用-file.js USPS 模块会抛出错误。它正好指向值的第一个字母 process.env.USPS_USER_ID.

throw new error_1.default("Must pass USPS userId");

USPSError [USPS Webtools Error]: Must pass USPS userId

at Object. (c:\website\controllers\middleware-file.js:35:14)

我可以通过在文件顶部添加 dotenv 来解决错误。

const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '../models/.env')});

确保调用 require('dotenv').config({ path: path.join(__dirname, '../models/.env')}); as early as possible in your application。此外,您可以记录结果或检查错误:

const dotenv = require('dotenv').config({ path: path.join(__dirname, '/models/.env')});

if (dotenv.error) {
  // Something went wrong
  console.error(dotenv.error);
} else {
  // Log parsed values
  console.log(dotenv.parsed);
}