我的问题
我在Heroku生产环境中加载环境变量时遇到了麻烦。 当推送到Heroku时,在构建脚本期间出现以下错误消息:
Failed to load ./.env.
当前设置
我在本地的应用程序根目录中使用.env
文件。我成功使用dotenv-webpack
插件加载环境变量,如下所示:
//webpack.config
const Dotenv = require('dotenv-webpack')
module.exports = {
// other settings...
plugins: [
new Dotenv(),
]
};
加载环境变量:
//server.js
require('dotenv').config();
console.log(process.env.MY_VARIABLE);
这在本地运行得很好,但在Heroku上失败了。
注意:我的配置变量已经在Heroku上设置好了,所以那不是问题。
我尝试过的
我已经尝试强制从应用程序根目录下加载 .env
文件,像这样:
new Dotenv({ path: path.resolve(__dirname, './.env') });
有人还指出,Heroku环境可能是系统范围的环境变量,因此我尝试使用以下命令加载它们:
new Dotenv({ systemVars: true });
这两种尝试都没有成功。
我的猜测
我注意到Heroku将他们的 .env
文件保存在 ./tmp/build_someRandomBuildId/.env
下。 我猜想 .env
文件不在目录的根目录下,因此dotenv无法找到它。 在我的Webpack配置中也没有办法硬编码此文件的位置,因为每次构建时都会随机生成构建ID。 有没有一种方法可以告诉Webpack在动态位置查找文件?
.env
文件和像dotenv
这样的库的整个意义在于设置环境变量,但是Heroku的配置变量可以直接实现这一点。.env
文件在开发过程中非常有用,不应包含在您推送的代码中。 - ChrisGPT was on strike