简体   繁体   English

客户端不可用的环境变量

[英]Environment variables not available to the client

I am doing the approach as instructed here: https://nextjs.org/docs/api-reference/next.config.js/environment-variables我正在按照此处的说明进行操作: https://nextjs.org/docs/api-reference/next.config.js/environment-variables

My .env.local file is as follows (vars censored):我的.env.local文件如下(vars censored):

GRAPHQL_ENDPOINT_FEDERATED="**************"
FIREBASE_API_KEY="**************"
FIREBASE_AUTH_DOMAIN="**************
FIREBASE_DATABASE_URL="**************"
FIREBASE_PROJECT_ID="**************"
FIREBASE_STORAGE_BUCKET="**************m"
FIREBASE_MESSAGING_SENDER_ID="**************"
FIREBASE_APP_ID="**************"
IOS_APP_ID=**************
IOS_BUNDLE_IDENTIFIER="**************"
NEXT_PUBLIC_SECRET_KEY=**************

and my next.config.js file:和我的next.config.js文件:

module.exports = {
    poweredByHeader: false,
    reactStrictMode: true,
    env: {
        GRAPHQL_ENDPOINT_FEDERATED: process.env.GRAPHQL_ENDPOINT_FEDERATED,
        FIREBASE_API_KEY: process.env.FIREBASE_API_KEY,
        FIREBASE_AUTH_DOMAIN: process.env.FIREBASE_AUTH_DOMAIN,
        FIREBASE_DATABASE_URL: process.env.FIREBASE_DATABASE_URL,
        FIREBASE_PROJECT_ID: process.env.FIREBASE_PROJECT_ID,
        FIREBASE_STORAGE_BUCKET: process.env.FIREBASE_STORAGE_BUCKET,
        FIREBASE_MESSAGING_SENDER_ID: process.env.FIREBASE_MESSAGING_SENDER_ID,
        FIREBASE_APP_ID: process.env.FIREBASE_APP_ID,
        IOS_APP_ID: process.env.IOS_APP_ID,
        IOS_BUNDLE_IDENTIFIER: process.env.IOS_BUNDLE_IDENTIFIER
    }
};

I am instantiating the firebase instance with those variables and it prints out fine on the server, but on client they are all undefined So my firebase.ts file is like:我正在用这些变量实例化 firebase 实例,它在服务器上打印得很好,但在客户端它们都是undefined的所以我的firebase.ts文件就像:

import fb from 'firebase/app'
import 'firebase/auth';
import 'firebase/database';

// firebase Config
const firebaseConfig = {
    apiKey: process.env.FIREBASE_API_KEY,
    authDomain: process.env.FIREBASE_AUTH_DOMAIN,
    databaseURL: process.env.FIREBASE_DATABASE_URL,
    projectId: process.env.FIREBASE_PROJECT_ID,
    storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
    messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
    appId: process.env.FIREBASE_APP_ID
};

console.log('process.env.FIREBASE_API_KEY : ', process.env.FIREBASE_API_KEY);
console.log('firebase config : ', firebaseConfig);
const firebase = !fb.apps.length ? fb.initializeApp(firebaseConfig) : fb.app()


export default firebase

Ouputs from server:服务器的输出: 在此处输入图像描述 And outputs on the client:并在客户端输出: 在此处输入图像描述

Am I missing something or doing anything wrong?我错过了什么或做错了什么? As a result, I cannot use my firebase instance and I continuously get this error:结果,我无法使用我的 firebase 实例,并且不断收到此错误: 在此处输入图像描述

EDIT: Looks like for variables to be available to the client, they need to be pre-pended with NEXT_PUBLIC_ in the env file (and this was my case as well)编辑:看起来对于客户端可用的变量,它们需要在 env 文件中预先添加NEXT_PUBLIC_ (这也是我的情况)

If you're using Next.js 9.4 or above, you can use the newer approach of adding environment variables (see docs ).如果您使用的是 Next.js 9.4 或更高版本,则可以使用更新的添加环境变量的方法(请参阅文档)。 You can remove variables from next.config.js .您可以从next.config.js中删除变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM