gpt4 book ai didi

python - 使用 Flask 为使用 create-react-app 创建的前端提供服务

转载 作者:IT老高 更新时间:2023-10-28 20:36:46 25 4
gpt4 key购买 nike

我有一个带有 API 路由的 Flask 后端,这些路由由使用 create-react-app 创建的 React 单页应用程序访问。当使用 create-react-app 开发服务器时,我的 Flask 后端工作。

我想从我的 Flask 服务器提供已构建的(使用 npm run build)静态 React 应用程序。构建 React 应用程序会导致以下目录结构:

- build
- static
- css
- style.[crypto].css
- style.[crypto].css.map
- js
- main.[crypto].js
- main.[crypto].js.map
- index.html
- service-worker.js
- [more meta files]

[crypto] 是指构建时随机生成的字符串。

在收到 index.html 文件后,浏览器会发出以下请求:

- GET /static/css/main.[crypto].css
- GET /static/css/main.[crypto].css
- GET /service-worker.js

我应该如何提供这些文件?我想出了这个:

from flask import Blueprint, send_from_directory

static = Blueprint('static', __name__)

@static.route('/')
def serve_static_index():
return send_from_directory('../client/build/', 'index.html')

@static.route('/static/<path:path>') # serve whatever the client requested in the static folder
def serve_static(path):
return send_from_directory('../client/build/static/', path)

@static.route('/service-worker.js')
def serve_worker():
return send_from_directory('../client/build/', 'service-worker.js')

这样,静态 Assets 就成功转换了。

另一方面,我可以将它与内置的 Flask 静态实用程序结合起来。但我不明白如何配置它。

我的解决方案是否足够强大?有没有办法使用内置的 Flask 功能来服务这些 Assets ?有没有更好的方法来使用 create-react-app?

最佳答案

import os
from flask import Flask, send_from_directory

app = Flask(__name__, static_folder='react_app/build')

# Serve React App
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def serve(path):
if path != "" and os.path.exists(app.static_folder + '/' + path):
return send_from_directory(app.static_folder, path)
else:
return send_from_directory(app.static_folder, 'index.html')


if __name__ == '__main__':
app.run(use_reloader=True, port=5000, threaded=True)

这就是我最终的结果。所以基本上捕获所有路由,测试路径是否为文件 => 发送文件 => 否则发送 index.html。这样,您可以从任何您希望的路线重新加载 react 应用程序并且它不会中断。

关于python - 使用 Flask 为使用 create-react-app 创建的前端提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209978/

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