如何访问Javascript对象中的窗口变量?

如何访问Javascript对象中的窗口变量?,javascript,reactjs,Javascript,Reactjs,下面的代码正确吗?我想访问javascript对象中的窗口变量 export const configs={ //firebase configuration apiKey: window._env_.API_KEY, projectId: window._env_.PROJECT_ID, messagingSenderId: window._env_.MESSAGING_SENDER_ID, backendURL: window._env_.BACKEND_URL } 如

下面的代码正确吗?我想访问javascript对象中的窗口变量

export const configs={
  //firebase configuration
  apiKey: window._env_.API_KEY,
  projectId: window._env_.PROJECT_ID,
  messagingSenderId: window._env_.MESSAGING_SENDER_ID,
  backendURL: window._env_.BACKEND_URL
}

如果此代码在浏览器中执行,
窗口
作为全局对象可用。但是,如果此代码在节点环境(服务器端)中执行,
窗口将未定义

如果您的代码同时执行服务器端(节点环境)和客户端(浏览器环境),那么这里有一种处理方法:

if(窗口类型!=“未定义”){
配置={
//火基配置
apiKey:window.\u env.\u API\u KEY,
projectId:window.\u环境\u项目\u ID,
messagingSenderId:window.\u环境\消息传递\发送者\ ID,
后端URL:窗口。\u环境\u后端\u URL
}
}否则{
//在这里处理服务器端逻辑
}
如果不需要在浏览器中执行此操作,最简单的方法是使用
process.env
,而不是在窗口中设置这些变量。如果在这两个位置都需要这些变量(它们来自
process.env
),这可能是另一种解决方案:

const env=typeof window==“未定义”?process.env:window.\u env;
导出常量配置={
//火基配置
apiKey:env.API_KEY,
projectId:env.PROJECT\u ID,
messagingSenderId:env.MESSAGING\u SENDER\u ID,
后端URL:env.BACKEND\u URL
}

如果此代码在浏览器中执行,
窗口作为全局对象可用。但是,如果此代码在节点环境(服务器端)中执行,
窗口将未定义

如果您的代码同时执行服务器端(节点环境)和客户端(浏览器环境),那么这里有一种处理方法:

if(窗口类型!=“未定义”){
配置={
//火基配置
apiKey:window.\u env.\u API\u KEY,
projectId:window.\u环境\u项目\u ID,
messagingSenderId:window.\u环境\消息传递\发送者\ ID,
后端URL:窗口。\u环境\u后端\u URL
}
}否则{
//在这里处理服务器端逻辑
}
如果不需要在浏览器中执行此操作,最简单的方法是使用
process.env
,而不是在窗口中设置这些变量。如果在这两个位置都需要这些变量(它们来自
process.env
),这可能是另一种解决方案:

const env=typeof window==“未定义”?process.env:window.\u env;
导出常量配置={
//火基配置
apiKey:env.API_KEY,
projectId:env.PROJECT\u ID,
messagingSenderId:env.MESSAGING\u SENDER\u ID,
后端URL:env.BACKEND\u URL
}

您应该创建一个新的js文件,然后按如下方式编写。文件名为appsettings.js

window.appSettings = {
    apiKey: '${REACT_API_KEY}',
    projectId: '${REACT_PROJECT_ID}',
    messagingSenderId: '${REACT_SENDER_ID}',
    backendURL: '${REACT_BACKEND_URL}'
};
环境文件

REACT_API_KEY=value
REACT_PROJECT_ID=value
REACT_SENDER_ID=value
REACT_BACKEND_URL=value
Public/index.html

<script src="http://localhost/appsettings.js?v={version}"></script>
    <script>
        window.appSettings.apiKey= '%REACT_API_KEY%';
        window.appSettings.projectId= '%REACT_PROJECT_ID%';
        window.appSettings.messagingSenderId= '%REACT_SENDER_ID%';
        window.appSettings.backendURL= '%REACT_BACKEND_URL%';
    </script>

不需要声明其他位置,因为它声明index.html

您应该创建一个新的js文件,然后按如下所示编写。文件名为appsettings.js

window.appSettings = {
    apiKey: '${REACT_API_KEY}',
    projectId: '${REACT_PROJECT_ID}',
    messagingSenderId: '${REACT_SENDER_ID}',
    backendURL: '${REACT_BACKEND_URL}'
};
环境文件

REACT_API_KEY=value
REACT_PROJECT_ID=value
REACT_SENDER_ID=value
REACT_BACKEND_URL=value
Public/index.html

<script src="http://localhost/appsettings.js?v={version}"></script>
    <script>
        window.appSettings.apiKey= '%REACT_API_KEY%';
        window.appSettings.projectId= '%REACT_PROJECT_ID%';
        window.appSettings.messagingSenderId= '%REACT_SENDER_ID%';
        window.appSettings.backendURL= '%REACT_BACKEND_URL%';
    </script>

不需要声明其他位置,因为它声明index.html

在何处以及如何设置这些变量?你也能展示一下那部分吗。为了安全起见,只需将
xxxx
替换为实际的
API\u键
值。这取决于此代码的上下文。从语法上看,它至少不是无效的。您在哪里以及如何设置这些变量?你也能展示一下那部分吗。为了安全起见,只需将
xxxx
替换为实际的
API\u键
值。这取决于此代码的上下文。就语法而言,它至少不是无效的。