前言
新的一年,开始水第一篇技术文。碰巧最近React玩得多,撸一篇文章纪念一下开发环境的搭建。🤔
- 开篇两问:
- 什么是React?:React,用于构建用户界面的 JavaScript 库(官网复制粘贴,真香,不用怎么写template了,舒服
- 什么是Flask?:一个使用Python编写的轻量级Web应用框架。用来写云原生应用很香!
先看下最终的项目结构,如下:《项目源码》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ├── app.py ├── env | ├── Include | ├── Lib | ├── LICENSE.txt | ├── Scripts | └── tcl ├── frontend | ├── build | ├── node_modules | ├── package-lock.json | ├── package.json | ├── public | ├── README.md | └── src ├── static | └── js └── templates └── index.html
|
开发环境:Windows+Flask+React+Git Bash+vscode
Backend-Flask
个人比较喜欢用CLI,So,项目开发依赖使用virtualenv+pip
管理,pipenv也还行,虽然lock package有点久。听说比较新的poetry很香?
1 2 3 4 5 6 7 8 9 10 11
| pip install virtualenv
virtualenv env
source env/Scripts/activate
pip install -r requirments.txt
mkdir templates mkdir static
|
后端服务的基础环境搭建好了,随手写个路由,看下能不能用先
1 2 3 4 5 6 7 8 9 10 11
| from flask import Flask
app = Flask(__name__)
@app.route('/') def index(): return "<h1>Hello React+Flask!</h1>"
if __name__ == '__main__': app.run('127.0.0.1', port=5000, debug=True)
|
Frontend-React
前端React应用的开发环境使用官方提供的脚手架create-react-app搭建。
1 2 3 4
| npm install -g create-react-app
create-react-app frontend
|
OK,前端开发环境搭建好了,清理掉src目录下的所有文件,自己写个组件,如下:
1 2 3
| cd frontend/src rm -rf * touch index.js
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import React from 'react' import ReactDOM from 'react-dom'
class App extends React.Component { render() { return ( <div className="container"> <h1 className="center-align"> 盒装一流弊<br/> <span className="waves-effect waves-light btn"> <i className="material-icons right">cloud</i>您说的都对 </span> </h1> </div> ); } }
ReactDOM.render(<App />, document.getElementById('root'))
|
OK,预览下效果,顺便调试(没啥可调试的/(ㄒoㄒ)/~~)。npm start
。效果如下:
没多大问题的话,是时候打包写好的React App给后端服务了。
Done
很舒服的是create-react-app封装好了 Babel 和 webpack,我们可以直接使用npm run build
打包写好的App到frontend/build目录中。然后手动将生成的文件分别挪到Flask的templates和static目录中即可。等等?手动,能不能使用CLI,dang然阔以。
npm 允许我们在package.json文件里面,使用scripts字段自定义脚本命令。更舒服的是npm script
提供了pre
和post
钩子。我们可以给build
脚本命令提供两个钩子prebuild
和postbuild
。编辑后的package.json
文件的Script命令如下如下:
1 2 3 4 5 6 7 8
| "scripts": { "start": "react-scripts start", "prebuild": "rm -rf ..\\templates\\index.html && rm -rf ..\\static", "build": "react-scripts build", "postbuild": "mv build\\index.html ..\\templates\\ && mv build\\static ..\\static", "test": "react-scripts test", "eject": "react-scripts eject" },
|
这时候,我们执行npm run build
命令时,会自动按照下面的顺序执行
1 2 3
| rm -rf ..\\templates\\index.html && rm -rf ..\\static react-scripts build mv build\\index.html ..\\templates\\ && mv build\\static ..\\static
|
OK,我们试试。如下:
Nice,没毛病。🎉🎉🎉。改下app.py
:
1 2 3 4 5 6 7 8 9 10
| from flask import Flask, render_template
app = Flask(__name__)
@app.route('/') def index(): return render_template('index.html')
if __name__ == '__main__': app.run('127.0.0.1', port=5000, debug=True)
|
冇问题啊!收工!!!
References