NextJS + Heroku:env变量未加载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NextJS + Heroku:env变量未加载相关的知识,希望对你有一定的参考价值。

我正在使用NextJS和Heroku。

在索引 - 第一次加载返回我在getInitialProps中获取的数据,但在常规函数中,我收到一条错误消息,因为缺少env变量。

当我转到另一个页面时,我得到了相同的错误,但是当我刷新时,我可以看到在getInitialProps中获取的数据。但同样,在常规函数中,我得到了缺少的env变量的错误。

在当地它的工作原理。我尝试了dotenv-webpack,但它没有帮助。我在Heroku中添加了配置变量。

有任何想法吗?

这是我的next.config.js文件:

const { parsed: localEnv } = require('dotenv').config()
const webpack = require('webpack')
const Dotenv = require('dotenv-webpack')
const path = require('path')

module.exports = {
    //target: 'serverless',
    webpack(config) {
        config.plugins.push(new webpack.EnvironmentPlugin(localEnv))
        config.node = {fs: "empty"};
        config.plugins = config.plugins || []

        config.plugins = [
            ...config.plugins,

            // Read the .env file
            new Dotenv({
                path: path.join(__dirname, '.env'),
                systemvars: true
            })
        ]

        return config
    },
    publicRuntimeConfig: {
        ADDRESS: process.env.ADDRESS,
        API_TOKEN: process.env.API_TOKEN,
        INFURA_API_KEY: process.env.INFURA_API_KEY
    }
}
答案

在next.js github页面中找到了答案:https://github.com/zeit/next.js/issues/6533

我尝试了几种不同的方法来解决相互碰撞的问题。

dotenv-webpack设置环境变量并不适合我。是什么工作在env设置next.config.js像这样:

const { parsed: localEnv } = require('dotenv').config()
const webpack = require('webpack');

const path = require('path')

module.exports = {
    webpack(config) {
        config.plugins.push(new webpack.EnvironmentPlugin(localEnv))
        config.node = {fs: "empty"};
        config.plugins = config.plugins || []

        config.plugins = [
            ...config.plugins,
        ]

        return config
    },
    env: {
        ADDRESS: '0xd6F75293ec795',
        API_TOKEN: 'YUBKzlbA2eFmNbkzk',
        INFURA_API_KEY: '97eb10aac61799f9e865',
        MNEMONIC: 'my not so secret for testing password',
    }
}

以上是关于NextJS + Heroku:env变量未加载的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序部署到 Heroku,ENV 变量不起作用

heroku 环境变量返回未定义

Heroku process.env undefined

Heroku 未使用已定义的 PORT 环境变量

如何在 nextjs 中使用不同的 .env 文件?

.env 文件中的环境变量在 django、heroku 的本地迁移期间不可用