J'ai un back-end Flask avec des routes API auxquelles on accède par une application React à page unique créée à l'aide de create-react-app. Lorsque j'utilise le serveur de développement create-react-app, mon back-end Flask fonctionne.
Je voudrais servir le construit (en utilisant npm run build
) application React statique depuis mon serveur Flask. La construction de l'application React conduit à la structure de répertoire suivante :
- 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]
Par [crypto]
Je veux dire les chaînes générées aléatoirement au moment de la construction.
Ayant reçu le index.html
le navigateur effectue alors les requêtes suivantes :
- GET /static/css/main.[crypto].css
- GET /static/css/main.[crypto].css
- GET /service-worker.js
Comment dois-je servir ces fichiers ? J'ai trouvé ça :
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')
De cette façon, les actifs statiques sont servis avec succès.
D'un autre côté, je pourrais incorporer cela avec les utilitaires statiques intégrés de Flask. Mais je ne comprends pas comment configurer cela.
Ma solution est-elle suffisamment robuste ? Y a-t-il un moyen d'utiliser les fonctions intégrées de Flask pour servir ces ressources ? Y a-t-il un meilleur moyen d'utiliser create-react-app ?
4 votes
Flask devrait connaître votre dossier statique sans que vous ayez à faire quoi que ce soit (tant que le dossier est nommé static et se trouve à côté de votre point d'entrée flask) ... c'est à dire
cp -rf /build/static ./static
dans le cadre de votre construction script ...1 votes
Vous pouvez également utiliser nginx pour servir vos fichiers statiques, ce qui est généralement le via recommandé (nginx est super bon pour les fichiers statiques)