当前位置: 首页 > 面试题库 >

使用Flask服务通过create-react-app创建的前端

薛云瀚
2023-03-14
问题内容

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

我想npm run build从我的Flask服务器提供内置的(使用)静态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')

这样,静态资产就可以成功使用。

另一方面,我可以将其与内置的Flask静态实用程序合并。但是我不知道如何配置它。

我的解决方案足够强大吗?有没有办法使用内置的Flask功能来提供这些资产?有没有更好的方法来使用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应用,并且不会中断。



 类似资料:
  • 创建响应应用时,图像中出现错误。它一直在正常工作,我所做的就是mkdir和cd到那个dir。 这就是错误的样子... NPX:在36.634s中安装了99必须使用导入来加载ES模块: C:\用户\Neeraj\AppData\漫游\npm-cache_npx\5172\node_modules\create-react-app\node_modules\is-promise\index.js不支持

  • ~$npm create-react-app my-app 安装软件包。这可能需要几分钟。使用cra-template安装react、react-dom和react-scripts... core-js@2.6.11 postinstall/home/ubuntu/my-app/node_modules/babel-runtime/node_modules/core-js node-e“try{r

  • 我想使用npx create-react-app my-app创建一个反应应用程序,它运行并创建一个带有node_modules、package.json和yarn.lock的文件夹,而没有src和公用文件夹,它返回一个未提供的模板,这很可能是您使用的create-react-app版本过低,就像你们在屏幕截图中看到的那样。 节点 v16.15.1, npm v7.24.2 我用的这个命令 这是最

  • 我正在尝试使用create react app创建我的应用程序。下面是一个错误 创建react应用程序我的应用程序 在C:\Users\racrk\React\my app中创建新的React应用程序。 安装软件包。这可能需要几分钟。正在安装react、react dom和react脚本。。。 core-js@2.6.9安装后C:\用户\racrk\React\my-app\node_module

  • Create React App 不用配置就可以创建 React App。 全局安装: npm install -g create-react-app 创建 App: create-react-app my-appcd my-app/ 启动 npm: npm start 打开 http://localhost:3000/  查看你的 App。 如果你准备将其部署到生产环境,只需创建一个压缩包,并且运行 npm run build。

  • 我正在尝试使用create react应用程序创建新应用程序 下面是错误<请帮忙。提前谢谢 CLI上的错误映像