我的问题
我无法在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在动态位置查找文件?