У меня есть флеш-back-end с API-маршрутами, к которым обращается одностраничное приложение React, созданное с использованием шаблона create-response-app. При использовании встроенного сервера разработчиков create-response-app мой конец флешки работает, без проблем.
Теперь я хотел бы использовать встроенное (используя npm run build
) статическое приложение для реагирования с моего сервера Flask. Создание реактивного приложения приводит к следующей структуре каталогов:
- 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')
Таким образом, статические активы успешно обслуживаются. Но это не очень изящное решение.
С другой стороны, я мог бы включить это со встроенными статическими утилитами. Но я не понимаю, как это настроить.
Я действительно не знаю, как справиться с этим, до такой степени, что это заставляет меня пересмотреть мое использование приложения create-response-app, поскольку оно заставляет меня структурировать мою статическую папку очень неудобным образом: я не могу изменить, как приложение запрашивает статический контент с сервера.
В целом: Является ли мое решение достаточно надежным? Есть ли способ использовать встроенные функции флагов для обслуживания этих активов? Есть ли лучший способ использовать приложение create-react-app? Любой вход оценивается. При необходимости я могу предоставить дополнительную информацию.
Спасибо за чтение!