gpt4 book ai didi

使用非根路径时 Kubernetes Ingress 上的 Angular 应用

转载 作者:行者123 更新时间:2023-12-02 12:09:57 24 4
gpt4 key购买 nike

我有一个在开发环境中完美运行的 Angular 应用程序。
当我尝试将其部署到 Kubernetes 集群并为其创建入口路由时,事情并没有按预期工作。
具体来说,我正在使用这个入口定义

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: angular-website
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- backend:
serviceName: angular-website
servicePort: 80
path: /website(/($|.*))?
当我尝试转到该入口路由时,我看到一个空白页面,它是网络选项卡(在 Chrome 中),我看到了这些错误
enter image description here
我意识到发生这种情况是因为我试图在非根路径上进行路由(即不是 / 的东西),而 Angular 并没有“意识到”这一点,并假设应用程序从根路径运行尝试加载所有 JS 包时的路径。
我意识到我可以通过编辑主要 index.html 中的一个部分来解决这个问题。在我的申请中
<base href="/">

<base href="/website">
但我宁愿不这样做,因为它需要我在构建过程中提前知道路径。
有办法解决吗?有没有办法让 Angular 动态地知道根路径,而无需重新编译应用程序来设置它?
编辑
Angular 应用程序托管在 NodeJS Express 应用程序中
const clientPath = path.join(__dirname, "..", "public", "angular-website", "dist", "angular-website");

app.use(express.static(clientPath));
app.get('/*', (req, res) => res.sendFile(path.join(clientPath, "index.html"));

最佳答案

我最终像这样在我的 Dockerfile 中构建了 Angular 应用程序

RUN npm run build -- --prod --base-href="/{{basePath}}" --deploy-url="{{basePath}}/"
基本上,在构建期间,我将一个占位符传递给 --base-href--deploy-url指示我的应用程序的根路径的参数。
然后,当我从我的 NodeJS + Express 进程中提供 Angular 应用程序时,我使用 mustache (模板引擎)用存储在环境变量中的我的应用程序的根路径替换占位符。
res.render('index', {
basePath: process.env.CLIENT_BASE_PATH || ''
});

关于使用非根路径时 Kubernetes Ingress 上的 Angular 应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63985961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com