reactjs 发布后.env文件变量访问

az31mfrm  于 2023-01-25  发布在  React
关注(0)|答案(3)|浏览(227)

我是新的React发展。我已经创建。env文件(根内),并得到了我的应用程序的一些网址。发布后,我的应用程序Azure我的应用程序没有得到网址值。我已经存储在我的公共文件夹内新的。env文件也。但它没有得到值。
.env文件(根目录内)

REACT_APP_SERVICE_BASE_URL = https://localhost:44385/
REACT_APP_CONFIG_BASE_URL = https://localhost:44354/

js代码

require('dotenv').config()
let SERVICE_BASE_URL = process.env.PUBLIC_URL.REACT_APP_SERVICE_BASE_URL;

任何人都可以有一个想法来解决我的问题。localhost工作正常。发布和更改url后不工作。
我的客户有不同的网址。2所以他们需要改变他们的变量。3所以我想如果我添加。4 env文件内的公共文件夹,他们可以改变他们的网址和使用它
也试过这种方式。但是这也不调用公共文件夹。env它也正在使用根文件夹。env

require('dotenv').config(process.env.PUBLIC_URL+ '/.env')
flvtvl50

flvtvl501#

如前所述,create-react-app创建了一个staticapp,因此在构建后不能动态地从环境变量中读取任何内容。相反,在 * 构建期间,.env文件中的值会被复制到静态网站中。之后的任何更改都不会更改您的app。
如果你使用的是Azure应用服务:你可以发布应用程序的源并让Azure应用程序服务生成应用程序,而不是在本地生成应用程序,然后发布预生成的应用程序捆绑包。这样,特定于客户的环境变量(应用程序设置)将在生成期间显示,并将在你的应用程序中进行适当设置。
有两种方法:
1.使用随源代码一起发布到Azure应用服务的custom build script。有关此操作的文档并不完善,但如果你更喜欢部署from git或从zip file部署,则可以使用此操作。Kudu是这两种部署方案背后的引擎,有关详细信息,请参阅wiki。请参阅this example deploy script
1.使用容器部署应用,并使用入口点脚本将环境变量的占位符替换为客户特定的App Service的环境变量值。

2示例(推荐):

下面是一些代码示例。您也可以参考this project作为使用此方法的工作示例。

响应应用程序代码以获取环境变量:
export const getGitHubToken = () => {
    if (process.env.NODE_ENV !== 'production') {
        if (!process.env.REACT_APP_SERVICE_BASE_URL) throw new Error('Must set env variable $REACT_APP_SERVICE_BASE_URL');
        return process.env.REACT_APP_SERVICE_BASE_URL;
    }
    return '__REACT_APP_SERVICE_BASE_URL__';
};
容器运行的入口点脚本:
#!/usr/bin/env bash

# Get environment variables to show up in SSH session
eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)

pushd /home/site/wwwroot/static/js > /dev/null

pattern="main.*.js"

files=( $(compgen -W "$pattern") )
mainFile=$files

sed -i 's|__REACT_APP_SERVICE_BASE_URL__|'"$REACT_APP_SERVICE_BASE_URL"'|g' "$mainFile"
sed -i 's|__REACT_APP_CONFIG_BASE_URL__|'"$REACT_APP_CONFIG_BASE_URL"'|g' "$mainFile"

popd > /dev/null
停靠文件:
FROM nginx

RUN mkdir -p /home/LogFiles /opt/startup /home/site/wwwroot \
    && echo "root:Docker!" | chpasswd \
    && echo "cd /home" >> /etc/bash.bashrc \
    && apt-get update \
    && apt-get install --yes --no-install-recommends \
    openssh-server \
    openrc \
    yarn \
    net-tools \
    dnsutils

# init_container.sh is in react app's deploy/startup folder
COPY deploy/startup /opt/startup
COPY build /home/site/wwwroot

RUN chmod -R +x /opt/startup

ENV PORT 8080
ENV SSH_PORT 2222
EXPOSE 2222 8080

ENV WEBSITE_ROLE_INSTANCE_ID localRoleInstance
ENV WEBSITE_INSTANCE_ID localInstance
ENV PATH ${PATH}:/home/site/wwwroot

WORKDIR /home/site/wwwroot

ENTRYPOINT ["/opt/startup/init_container.sh"]
bvhaajcl

bvhaajcl2#

let SERVICE_BASE_URL = process.env.REACT_APP_SERVICE_BASE_URL
qvk1mo1f

qvk1mo1f3#

如上所述,https://create-react-app.dev/docs/adding-custom-environment-variables/.env文件用于开发目的。
我假设你使用create-react-app来构建你的应用程序。在这种情况下,环境变量是在构建时注入到你的应用程序中的。当你在本地开发时,env变量会自动注入到你的代码中。
在Azure上部署的情况下,您应该在该环境中定义环境变量并在那里构建应用程序。

相关问题