Heroku无法加载./.env

我的问题

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

everaining 回答:Heroku无法加载./.env

如果您不使用Webpack,则该想法的解决方案类似于已接受的答案。 Heroku默认情况下在“生产”模式下工作,因此,如果Heroku中的问题是Dotenv(无论如何在Heroku中都不应使用),请在生产时禁用Dotenv,如下所示:

if (process.env.NODE_ENV !== 'production') { 
   require('dotenv').config() }
}

...然后,只需执行以下操作即可访问env变量:

var someVar = process.env.SOME_VARIABLE;

请不要忘记首先通过在应用程序的仪表板中使用控制台命令行或与app.json文件一起在Heroku上设置环境变量。

,

今天我偶然发现了这个问题,我尝试了几种解决方案,但都没有奏效。我的应用程序在本地运行,但在生产模式 (heroku) 下它没有正确加载 process.env。

然后我发现了这个https://www.npmjs.com/package/dotenv-webpack

//webpack.config.js
  plugins: [
      new Dotenv({ systemvars: true }),],

只需将 systemvars 设置为 true 即可。 现在我已经使用不同的密钥对 .env 文件和 heroku 仪表板进行了测试;它们没有连接,它们在生产或开发模式下正确地替换了自己。

使用包“dotenv-webpack”而不是“dotenv”。

我希望这能为遇到同样问题的人节省一些时间

,

我终于找到了解决方案,将其留给其他与我有同样问题的人解决。

我使用dotenv-webpack在本地设置我的环境变量,这就像一个超级按钮。另一方面,Heroku自动设置其环境变量,因此无需自己设置它们。无需查找.env文件。我要做的就是将我的webpack.config分成两个单独的文件。

//webpack.dev

require('dotenv').config();

plugins: [
  new Dotenv()
],

在本地加载.env文件。

//webpack.prod

require('dotenv').config();

plugins: [
  new webpack.DefinePlugin({
    'process.env': {
      'YOUR_VARIABLE': JSON.stringify(process.env.YOUR_VARIABLE),}
  });
]

从Heroku获取环境变量并将其写入您自己的process.env

本文链接:https://www.f2er.com/2762504.html

大家都在问