最佳答案
我有一个 Flask 后端的 API 路由,可以通过使用 create-response-app 创建的 React 单页应用程序访问。当使用 create-response-app dev 服务器时,我的 Flask 后端可以正常工作。
我想服务建立(使用 npm run build
)从我的 Flask 服务器静态反应应用程序。构建 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')
通过这种方式,静态资产得到了成功的服务。
另一方面,我可以把它与内置的 Flask 静态实用程序结合起来。但是我不知道如何配置它。
我的解决方案是否足够稳健?是否有一种方法可以使用内置的 Flask 特性来服务这些资产?有没有更好的方法来使用 create-response-app?