You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular i18n应用部署AKS后路由切换无法读取环境变量

Angular i18n多环境部署配置问题解决方案

核心问题原因

Angular i18n构建完成后,每个语言环境(如/en/)会生成独立的目录结构,包含专属的assets文件夹。当应用路由到/en/路径时,会默认从/en/assets/读取配置文件,但你仅在根目录/assets/生成了env.js,导致路径不匹配无法加载。

推荐方案:修改Nginx配置(无需复制多份assets)

通过Nginx的路由转发规则,将所有语言路径下的assets请求统一指向根目录的assets文件夹,这样只需维护一份配置文件,完全符合一次构建、多环境部署的目标。

修改Nginx配置文件(nginx.conf)

在你的Nginx配置中添加以下规则,匹配语言路径下的assets请求并转发到根目录:

# 匹配/en/assets/、/fr/assets/等语言路径下的assets请求
location ~ ^/([a-z]{2})/assets/(.*)$ {
    alias /usr/share/nginx/html/assets/$2;
}

# 同时保留根路径的assets访问规则
location /assets/ {
    root /usr/share/nginx/html;
}

或者使用rewrite规则实现相同效果:

rewrite ^/([a-z]{2})/assets/(.*)$ /assets/$2 last;

调整Dockerfile(保持现有逻辑即可)

你当前的Dockerfile已经将根目录assets配置好(生成env.js的逻辑),无需额外修改各语言目录的assets,只需确保Nginx配置生效即可。

备选方案:替换各语言环境的assets文件(不推荐)

如果一定要通过复制assets文件解决,需要在Dockerfile中为每个语言环境复制assets目录并生成对应的env.js,但这种方式会增加镜像体积,且不符合一次构建的简洁性,维护成本更高。

示例修改(仅作参考,不推荐):

# 复制所有语言环境的assets目录
COPY --from=build /app/dist/<app>/en/assets/ /usr/share/nginx/html/en/assets
COPY --from=build /app/dist/<app>/fr/assets/ /usr/share/nginx/html/fr/assets
# 为每个语言目录删除原env.js
RUN rm /usr/share/nginx/html/en/assets/env.js /usr/share/nginx/html/fr/assets/env.js

CMD ["/bin/sh",  "-c",  "envsubst < /usr/share/nginx/html/assets/env.template.js > /usr/share/nginx/html/assets/env.js && envsubst < /usr/share/nginx/html/assets/env.template.js > /usr/share/nginx/html/en/assets/env.js && envsubst < /usr/share/nginx/html/assets/env.template.js > /usr/share/nginx/html/fr/assets/env.js && exec nginx -g 'daemon off;'"]

内容的提问来源于stack exchange,提问作者prakashrajansakthivel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:31:16