gpt4 book ai didi

reactjs - basename 和 homepage 未按预期工作以服务/静态/开发中的文件

转载 作者:行者123 更新时间:2023-12-02 11:43:02 25 4
gpt4 key购买 nike

不确定这是 Kubernetes、ingress-nginx 还是 ReactJS (create-react-app) 问题...

项目结构

new-app/
client/
src/
App.js
index.js
Test.js
package.json
k8s/
client.yaml
ingress.yaml
server/
skaffold.yaml

问题

  • 当使用 Skaffold 启动集群时,ReactJS 前端应该在 192.168.64.5/client 上运行
  • 导航到 192.168.64.5/client 和黑屏
  • 开发者控制台显示:

enter image description here enter image description here

基本上,它试图从 /static 提供静态文件,但我需要它们来自 /client/static

建议的解决方案

假设这是一个 ReactJS 问题,解决方案如下:

在我的情况下似乎没有任何效果。仍然显示尝试从 /static 而不是 /client/static 提供的 Assets 。

ReactJS 应用代码

// App.js

import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import './App.css';

import Test from './Test';

const App = () => {
return (
<BrowserRouter
basename='/client'>
<>
<Route exact path='/' component={Test} />
</>
</BrowserRouter>

);
}

export default App;
// Test.js

import React, { useState, useEffect } from 'react';
import logo from './logo.svg';
import './App.css';
import axios from 'axios';

const Test = () => {

const [data, setData] = useState('');

useEffect(() => {
const fetchData = async () => {
const result = await axios('/api/auth/test/');
setData(result.data);
};
fetchData();
}, []);

return (
<div className='App'>
<header className='App-header'>
<img src={logo} className='App-logo' alt='logo' />
<p>
Edit <code>src/App.js</code> and save to reload!
</p>
<p>
{data}
</p>
<a
className='App-link'
href='https://reactjs.org'
target='_blank'
rel='noopener noreferrer'
>
Learn React
</a>
</header>
</div>
)

};

export default Test;
{
"name": "client",
"version": "0.1.0",
"private": true,
"homepage": "/client",
"dependencies": {
"axios": "^0.19.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-router-dom": "^5.1.2",
"react-scripts": "3.2.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

Kubernetes/Skaffold 和 Docker list

# Dockerfile.dev

FROM node:alpine
EXPOSE 3000
WORKDIR '/app'
COPY ./client/package.json ./
RUN npm install
COPY ./client .
CMD ["npm", "run", "start"]
# ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /client/?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000
# client.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: client-deployment
spec:
replicas: 3
selector:
matchLabels:
component: client
template:
metadata:
labels:
component: client
spec:
containers:
- name: client
image: clientappcontainers.azurecr.io/client
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: client-cluster-ip-service
spec:
type: ClusterIP
selector:
component: client
ports:
- port: 3000
targetPort: 3000
# skaffold.yaml

apiVersion: skaffold/v1beta15
kind: Config
build:
local:
push: false
artifacts:
- image: clientappcontainers.azurecr.io/client
docker:
dockerfile: ./client/Dockerfile.dev
sync:
manual:
- src: "***/*.js"
dest: .
- src: "***/*.html"
dest: .
- src: "***/*.css"
dest: .
deploy:
kubectl:
manifests:
- manifests/ingress.yaml
- manifests/client.yaml

那么我做错了什么?

编辑:

我应该注意到,这样做时一切正常:

- path: /?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000

repo 演示问题:

https://github.com/eox-dev/subdir-issue

最佳答案

显然,目前在开发环境中的 CRA 中这是不可能的:

https://github.com/facebook/create-react-app/issues/8222#issuecomment-568308139

关于reactjs - basename 和 homepage 未按预期工作以服务/静态/开发中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415730/

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