Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 环境变量反应_Javascript_Reactjs - Fatal编程技术网

Javascript 环境变量反应

Javascript 环境变量反应,javascript,reactjs,Javascript,Reactjs,我有一个react组件,它在开发中会重定向到本地主机url,但在生产中会重定向到不同的url。在我的后端,我也遇到了同样的情况,我用一个名为dotenv的包解决了这个问题。我想知道有人会如何在前端做到这一点 export default withRouter(function Login(props) { useEffect(() => { if(localStorage.getItem('jwt')){ props.history.pus

我有一个react组件,它在开发中会重定向到本地主机url,但在生产中会重定向到不同的url。在我的后端,我也遇到了同样的情况,我用一个名为dotenv的包解决了这个问题。我想知道有人会如何在前端做到这一点

export default withRouter(function Login(props) {

    useEffect(() => {
        if(localStorage.getItem('jwt')){
            props.history.push('/dashboard');
        }
    })

    const handleLogin = () => {
        window.location.href = "http://localhost:8000/auth/google";
    }

    return (
        <LoginView handleLogin={handleLogin}/>
    )
})
使用路由器导出默认值(功能登录(道具){
useffect(()=>{
if(localStorage.getItem('jwt')){
props.history.push('/dashboard');
}
})
常量handleLogin=()=>{
window.location.href=”http://localhost:8000/auth/google";
}
返回(
)
})

您也可以使用dotenv添加环境变量进行响应。在应用程序部署期间(在构建过程中),必须用相应的URL替换环境变量(因为这是前端应用程序中最常见的用例)。这可以在配置构建过程时完成

下面是一个使用Webpack的示例

这里的整个想法是创建一个文件(称为just.env),其中包含 您的环境变量。防止人们发现你的 本地数据库密码与您为每个数据库使用的密码相同 对于您在internet上的帐户,我建议您将.env文件添加到 你的,别理我。您的前端代码将引用相同的代码 两个环境上的环境变量(process.env.API_URL) (开发/生产),但因为您在 在.env文件中,编译的值将不同

我建议为react应用程序提供一个单独的.env文件,因为它不应该意外地与网站一起提供

Create React App有一个模块(围绕节点dotenv模块构建),可用于添加自定义环境变量

环境变量在构建期间嵌入。自从 CreateReact应用程序生成一个静态HTML/CSS/JS包,它不能 可能在运行时读取它们。要在运行时读取它们,您需要 将HTML加载到服务器上的内存中并替换中的占位符 运行时,如下所述。或者,您可以在上重建应用程序 只要你改变它们,服务器就会自动关闭


这取决于你如何使用react

如果您使用的是react脚本,则可以转到上面的解决方案()

但如果您使用的是webpack,请尝试使用DotenvPlugin代替dotenvmodule()


在我看来,请不要遵循方法1在媒体链接中的使用,因为不应该在git上推送env,但需要做package.json。

是否重定向从后端服务返回的url?我认为可以通过进行一些webpack配置来实现,有一个npm包,这两个url完全不同,还是只改变了域?为什么不使用相对路径?或根
/
的绝对路径,而不指定域。我不太喜欢在运行时代码中使用“开发vs.生产”逻辑。你从哪里重定向?它是否是您重定向到的另一个主机(在开发和生产中?)要添加到此答案以及URL和创建react应用程序的特定用例,您还可以在您的package.json中设置
proxy
属性,如本文所述