├── .gitignore
├── LICENSE
├── README.md
├── back
├── app.py
└── requirements.txt
└── front
├── index.html
├── package-lock.json
├── package.json
├── public
└── favicon.ico
├── src
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
└── main.js
└── vite.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
23 | # python
24 | __pycache__
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 HaveTwoBrush
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue Flask Template
2 |
3 | 📦 一个快速搭建 Web 应用的模版!前端使用渐进式框架 [Vue](https://github.com/vuejs/vue),后端使用微框架 [Flask](https://github.com/pallets/flask)。
4 |
5 | ## 使用方法
6 |
7 | 1. 点击本项目右上角的绿色按钮 `Use this template`(使用此模板),输入名称和说明,完成创建。
8 |
9 | 2. 将刚刚创建好的项目克隆到本地,这里以本项目为例,实际操作时这里需要替换你自己的项目。
10 |
11 | ```bash
12 | git clone https://github.com/Ailln/vue-flask-template.git --depth 1
13 | ```
14 |
15 | 3. 安装环境依赖,本项目需要 Node 环境和 Python 环境,如果对这部分不熟悉的看本文档最后的参考文章。
16 |
17 | > 注意:版本要求 Node version 12+, Python version 3.6+ 。
18 |
19 | ```bash
20 | # 前端环境依赖安装
21 | cd front
22 | npm install
23 |
24 | # 后端环境依赖安装
25 | cd back
26 | pip install -r requirements.txt
27 | ```
28 |
29 | 4. 打开两个终端,分别启动前端和后端。
30 |
31 | ```bash
32 | # 启动前端
33 | cd front
34 | npm run dev
35 |
36 | # 启动后端
37 | cd back
38 | python app.py
39 | ```
40 |
41 | 5. 在浏览器中打开:`http://localhost:3000/` 即可预览。
42 |
43 | 6. 根据你的需求修改代码。
44 |
45 | ## 项目结构
46 |
47 | ```
48 | .
49 | ├── front # 前端
50 | │ ├── package.json # 前端依赖
51 | │ ├── package-lock.json
52 | │ ├── public
53 | │ ├── src
54 | │ │ ├── App.vue # 主页面
55 | │ │ ├── components # 子组件
56 | │ │ │ └── HelloWorld.vue
57 | │ │ ├── assets # 静态资源
58 | │ │ └── main.js
59 | │ └── vite.config.js
60 | ├── back # 后端
61 | │ ├── app.py
62 | │ └── requirements.txt # 后端依赖
63 | ├── README.md
64 | ├── LICENSE
65 | └── .gitignore
66 | ```
67 |
68 | ## 许可
69 |
70 | [](./LICENSE)
71 |
72 | ## 参考
73 |
74 | - [Vue3 教程](https://v3.cn.vuejs.org/)
75 | - [Vite 官方中文文档](https://cn.vitejs.dev/guide/why.html)
76 | - [Flask 官方文档](https://flask.palletsprojects.com/en/1.1.x/)
77 | - [如何安装 Node 开发环境?](https://www.v2ai.cn/2018/11/11/linux/7-node-install/)
78 | - [如何安装 Python 开发环境?](https://www.v2ai.cn/2018/04/29/python/2-python-install/)
79 |
--------------------------------------------------------------------------------
/back/app.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask_cors import CORS
3 | from flask_restful import Api
4 | from flask_restful import Resource
5 |
6 | app = Flask(__name__)
7 | CORS(app)
8 | api = Api(app)
9 |
10 |
11 | @app.route('/', methods=["GET"])
12 | def index():
13 | return "Welcome to API v1, try /hello."
14 |
15 |
16 | class Hello(Resource):
17 | @staticmethod
18 | def get():
19 | return "[get] hello flask"
20 |
21 | @staticmethod
22 | def post():
23 | return "[post] hello flask"
24 |
25 |
26 | api.add_resource(Hello, '/hello')
27 |
28 | if __name__ == "__main__":
29 | app.run(host='127.0.0.1', port=8010)
30 |
--------------------------------------------------------------------------------
/back/requirements.txt:
--------------------------------------------------------------------------------
1 | flask==1.1.2
2 | flask_cors==3.0.10
3 | flask_restful==0.3.8
4 |
--------------------------------------------------------------------------------
/front/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/front/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-flask-template",
3 | "version": "0.0.1",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/helper-validator-identifier": {
8 | "version": "7.12.11",
9 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
10 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
11 | },
12 | "@babel/parser": {
13 | "version": "7.13.16",
14 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
15 | "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw=="
16 | },
17 | "@babel/types": {
18 | "version": "7.13.17",
19 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
20 | "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
21 | "requires": {
22 | "@babel/helper-validator-identifier": "^7.12.11",
23 | "to-fast-properties": "^2.0.0"
24 | }
25 | },
26 | "@vitejs/plugin-vue": {
27 | "version": "1.2.2",
28 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.2.2.tgz",
29 | "integrity": "sha512-5BI2WFfs/Z0pAV4S/IQf1oH3bmFYlL5ATMBHgTt1Lf7hAnfpNd5oUAAs6hZPfk3QhvyUQgtk0rJBlabwNFcBJQ==",
30 | "dev": true
31 | },
32 | "@vue/compiler-core": {
33 | "version": "3.0.11",
34 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.11.tgz",
35 | "integrity": "sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw==",
36 | "requires": {
37 | "@babel/parser": "^7.12.0",
38 | "@babel/types": "^7.12.0",
39 | "@vue/shared": "3.0.11",
40 | "estree-walker": "^2.0.1",
41 | "source-map": "^0.6.1"
42 | }
43 | },
44 | "@vue/compiler-dom": {
45 | "version": "3.0.11",
46 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.11.tgz",
47 | "integrity": "sha512-+3xB50uGeY5Fv9eMKVJs2WSRULfgwaTJsy23OIltKgMrynnIj8hTYY2UL97HCoz78aDw1VDXdrBQ4qepWjnQcw==",
48 | "requires": {
49 | "@vue/compiler-core": "3.0.11",
50 | "@vue/shared": "3.0.11"
51 | }
52 | },
53 | "@vue/compiler-sfc": {
54 | "version": "3.0.11",
55 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.11.tgz",
56 | "integrity": "sha512-7fNiZuCecRleiyVGUWNa6pn8fB2fnuJU+3AGjbjl7r1P5wBivfl02H4pG+2aJP5gh2u+0wXov1W38tfWOphsXw==",
57 | "dev": true,
58 | "requires": {
59 | "@babel/parser": "^7.13.9",
60 | "@babel/types": "^7.13.0",
61 | "@vue/compiler-core": "3.0.11",
62 | "@vue/compiler-dom": "3.0.11",
63 | "@vue/compiler-ssr": "3.0.11",
64 | "@vue/shared": "3.0.11",
65 | "consolidate": "^0.16.0",
66 | "estree-walker": "^2.0.1",
67 | "hash-sum": "^2.0.0",
68 | "lru-cache": "^5.1.1",
69 | "magic-string": "^0.25.7",
70 | "merge-source-map": "^1.1.0",
71 | "postcss": "^8.1.10",
72 | "postcss-modules": "^4.0.0",
73 | "postcss-selector-parser": "^6.0.4",
74 | "source-map": "^0.6.1"
75 | }
76 | },
77 | "@vue/compiler-ssr": {
78 | "version": "3.0.11",
79 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.11.tgz",
80 | "integrity": "sha512-66yUGI8SGOpNvOcrQybRIhl2M03PJ+OrDPm78i7tvVln86MHTKhM3ERbALK26F7tXl0RkjX4sZpucCpiKs3MnA==",
81 | "dev": true,
82 | "requires": {
83 | "@vue/compiler-dom": "3.0.11",
84 | "@vue/shared": "3.0.11"
85 | }
86 | },
87 | "@vue/reactivity": {
88 | "version": "3.0.11",
89 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.11.tgz",
90 | "integrity": "sha512-SKM3YKxtXHBPMf7yufXeBhCZ4XZDKP9/iXeQSC8bBO3ivBuzAi4aZi0bNoeE2IF2iGfP/AHEt1OU4ARj4ao/Xw==",
91 | "requires": {
92 | "@vue/shared": "3.0.11"
93 | }
94 | },
95 | "@vue/runtime-core": {
96 | "version": "3.0.11",
97 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.11.tgz",
98 | "integrity": "sha512-87XPNwHfz9JkmOlayBeCCfMh9PT2NBnv795DSbi//C/RaAnc/bGZgECjmkD7oXJ526BZbgk9QZBPdFT8KMxkAg==",
99 | "requires": {
100 | "@vue/reactivity": "3.0.11",
101 | "@vue/shared": "3.0.11"
102 | }
103 | },
104 | "@vue/runtime-dom": {
105 | "version": "3.0.11",
106 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.11.tgz",
107 | "integrity": "sha512-jm3FVQESY3y2hKZ2wlkcmFDDyqaPyU3p1IdAX92zTNeCH7I8zZ37PtlE1b9NlCtzV53WjB4TZAYh9yDCMIEumA==",
108 | "requires": {
109 | "@vue/runtime-core": "3.0.11",
110 | "@vue/shared": "3.0.11",
111 | "csstype": "^2.6.8"
112 | }
113 | },
114 | "@vue/shared": {
115 | "version": "3.0.11",
116 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.0.11.tgz",
117 | "integrity": "sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA=="
118 | },
119 | "big.js": {
120 | "version": "5.2.2",
121 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
122 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
123 | "dev": true
124 | },
125 | "bluebird": {
126 | "version": "3.7.2",
127 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
128 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
129 | "dev": true
130 | },
131 | "colorette": {
132 | "version": "1.2.2",
133 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
134 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
135 | "dev": true
136 | },
137 | "consolidate": {
138 | "version": "0.16.0",
139 | "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz",
140 | "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==",
141 | "dev": true,
142 | "requires": {
143 | "bluebird": "^3.7.2"
144 | }
145 | },
146 | "cssesc": {
147 | "version": "3.0.0",
148 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
149 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
150 | "dev": true
151 | },
152 | "csstype": {
153 | "version": "2.6.17",
154 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.17.tgz",
155 | "integrity": "sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A=="
156 | },
157 | "emojis-list": {
158 | "version": "3.0.0",
159 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
160 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
161 | "dev": true
162 | },
163 | "esbuild": {
164 | "version": "0.9.7",
165 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz",
166 | "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==",
167 | "dev": true
168 | },
169 | "estree-walker": {
170 | "version": "2.0.2",
171 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
172 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
173 | },
174 | "fsevents": {
175 | "version": "2.3.2",
176 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
177 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
178 | "dev": true,
179 | "optional": true
180 | },
181 | "function-bind": {
182 | "version": "1.1.1",
183 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
184 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
185 | "dev": true
186 | },
187 | "generic-names": {
188 | "version": "2.0.1",
189 | "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz",
190 | "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==",
191 | "dev": true,
192 | "requires": {
193 | "loader-utils": "^1.1.0"
194 | }
195 | },
196 | "has": {
197 | "version": "1.0.3",
198 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
199 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
200 | "dev": true,
201 | "requires": {
202 | "function-bind": "^1.1.1"
203 | }
204 | },
205 | "hash-sum": {
206 | "version": "2.0.0",
207 | "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
208 | "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
209 | "dev": true
210 | },
211 | "icss-replace-symbols": {
212 | "version": "1.1.0",
213 | "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
214 | "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
215 | "dev": true
216 | },
217 | "icss-utils": {
218 | "version": "5.1.0",
219 | "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
220 | "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
221 | "dev": true
222 | },
223 | "is-core-module": {
224 | "version": "2.3.0",
225 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz",
226 | "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==",
227 | "dev": true,
228 | "requires": {
229 | "has": "^1.0.3"
230 | }
231 | },
232 | "json5": {
233 | "version": "1.0.1",
234 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
235 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
236 | "dev": true,
237 | "requires": {
238 | "minimist": "^1.2.0"
239 | }
240 | },
241 | "loader-utils": {
242 | "version": "1.4.0",
243 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
244 | "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
245 | "dev": true,
246 | "requires": {
247 | "big.js": "^5.2.2",
248 | "emojis-list": "^3.0.0",
249 | "json5": "^1.0.1"
250 | }
251 | },
252 | "lodash.camelcase": {
253 | "version": "4.3.0",
254 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
255 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
256 | "dev": true
257 | },
258 | "lru-cache": {
259 | "version": "5.1.1",
260 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
261 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
262 | "dev": true,
263 | "requires": {
264 | "yallist": "^3.0.2"
265 | }
266 | },
267 | "magic-string": {
268 | "version": "0.25.7",
269 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
270 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
271 | "dev": true,
272 | "requires": {
273 | "sourcemap-codec": "^1.4.4"
274 | }
275 | },
276 | "merge-source-map": {
277 | "version": "1.1.0",
278 | "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
279 | "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
280 | "dev": true,
281 | "requires": {
282 | "source-map": "^0.6.1"
283 | }
284 | },
285 | "minimist": {
286 | "version": "1.2.5",
287 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
288 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
289 | "dev": true
290 | },
291 | "nanoid": {
292 | "version": "3.1.22",
293 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz",
294 | "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==",
295 | "dev": true
296 | },
297 | "path-parse": {
298 | "version": "1.0.7",
299 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
300 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
301 | "dev": true
302 | },
303 | "postcss": {
304 | "version": "8.2.13",
305 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz",
306 | "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==",
307 | "dev": true,
308 | "requires": {
309 | "colorette": "^1.2.2",
310 | "nanoid": "^3.1.22",
311 | "source-map": "^0.6.1"
312 | }
313 | },
314 | "postcss-modules": {
315 | "version": "4.0.0",
316 | "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.0.0.tgz",
317 | "integrity": "sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw==",
318 | "dev": true,
319 | "requires": {
320 | "generic-names": "^2.0.1",
321 | "icss-replace-symbols": "^1.1.0",
322 | "lodash.camelcase": "^4.3.0",
323 | "postcss-modules-extract-imports": "^3.0.0",
324 | "postcss-modules-local-by-default": "^4.0.0",
325 | "postcss-modules-scope": "^3.0.0",
326 | "postcss-modules-values": "^4.0.0",
327 | "string-hash": "^1.1.1"
328 | }
329 | },
330 | "postcss-modules-extract-imports": {
331 | "version": "3.0.0",
332 | "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
333 | "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
334 | "dev": true
335 | },
336 | "postcss-modules-local-by-default": {
337 | "version": "4.0.0",
338 | "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
339 | "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
340 | "dev": true,
341 | "requires": {
342 | "icss-utils": "^5.0.0",
343 | "postcss-selector-parser": "^6.0.2",
344 | "postcss-value-parser": "^4.1.0"
345 | }
346 | },
347 | "postcss-modules-scope": {
348 | "version": "3.0.0",
349 | "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
350 | "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
351 | "dev": true,
352 | "requires": {
353 | "postcss-selector-parser": "^6.0.4"
354 | }
355 | },
356 | "postcss-modules-values": {
357 | "version": "4.0.0",
358 | "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
359 | "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
360 | "dev": true,
361 | "requires": {
362 | "icss-utils": "^5.0.0"
363 | }
364 | },
365 | "postcss-selector-parser": {
366 | "version": "6.0.5",
367 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz",
368 | "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==",
369 | "dev": true,
370 | "requires": {
371 | "cssesc": "^3.0.0",
372 | "util-deprecate": "^1.0.2"
373 | }
374 | },
375 | "postcss-value-parser": {
376 | "version": "4.1.0",
377 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
378 | "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
379 | "dev": true
380 | },
381 | "resolve": {
382 | "version": "1.20.0",
383 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
384 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
385 | "dev": true,
386 | "requires": {
387 | "is-core-module": "^2.2.0",
388 | "path-parse": "^1.0.6"
389 | }
390 | },
391 | "rollup": {
392 | "version": "2.46.0",
393 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.46.0.tgz",
394 | "integrity": "sha512-qPGoUBNl+Z8uNu0z7pD3WPTABWRbcOwIrO/5ccDJzmrtzn0LVf6Lj91+L5CcWhXl6iWf23FQ6m8Jkl2CmN1O7Q==",
395 | "dev": true,
396 | "requires": {
397 | "fsevents": "~2.3.1"
398 | }
399 | },
400 | "source-map": {
401 | "version": "0.6.1",
402 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
403 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
404 | },
405 | "sourcemap-codec": {
406 | "version": "1.4.8",
407 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
408 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
409 | "dev": true
410 | },
411 | "string-hash": {
412 | "version": "1.1.3",
413 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
414 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
415 | "dev": true
416 | },
417 | "to-fast-properties": {
418 | "version": "2.0.0",
419 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
420 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
421 | },
422 | "util-deprecate": {
423 | "version": "1.0.2",
424 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
425 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
426 | "dev": true
427 | },
428 | "vite": {
429 | "version": "2.2.3",
430 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.2.3.tgz",
431 | "integrity": "sha512-PtjyBL4GtACM+uT5q5hi2+AlMBbb6YI2b2bam6QI8ZdZt4FezseF0yZHQx0G+b3po9jIJ/GS5N9gc5Yq9Rue7g==",
432 | "dev": true,
433 | "requires": {
434 | "esbuild": "^0.9.3",
435 | "fsevents": "~2.3.1",
436 | "postcss": "^8.2.1",
437 | "resolve": "^1.19.0",
438 | "rollup": "^2.38.5"
439 | }
440 | },
441 | "vue": {
442 | "version": "3.0.11",
443 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.0.11.tgz",
444 | "integrity": "sha512-3/eUi4InQz8MPzruHYSTQPxtM3LdZ1/S/BvaU021zBnZi0laRUyH6pfuE4wtUeLvI8wmUNwj5wrZFvbHUXL9dw==",
445 | "requires": {
446 | "@vue/compiler-dom": "3.0.11",
447 | "@vue/runtime-dom": "3.0.11",
448 | "@vue/shared": "3.0.11"
449 | }
450 | },
451 | "yallist": {
452 | "version": "3.1.1",
453 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
454 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
455 | "dev": true
456 | }
457 | }
458 | }
459 |
--------------------------------------------------------------------------------
/front/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-flask-template",
3 | "version": "0.0.1",
4 | "scripts": {
5 | "dev": "vite",
6 | "build": "vite build",
7 | "serve": "vite preview"
8 | },
9 | "dependencies": {
10 | "vue": "^3.0.5"
11 | },
12 | "devDependencies": {
13 | "@vitejs/plugin-vue": "^1.2.2",
14 | "@vue/compiler-sfc": "^3.0.5",
15 | "vite": "^2.2.3"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/front/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ailln/vue-flask-template/06ae112abd076de32b68af55ccdca95ab5c72ace/front/public/favicon.ico
--------------------------------------------------------------------------------
/front/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
13 |
23 |
--------------------------------------------------------------------------------
/front/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ailln/vue-flask-template/06ae112abd076de32b68af55ccdca95ab5c72ace/front/src/assets/logo.png
--------------------------------------------------------------------------------
/front/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ msg }}
3 |
4 |
5 |
6 | Vite Documentation
7 |
8 | |
9 | Vue 3 Documentation
10 |
11 |
12 |
13 | {{ data.text1 }}
14 | {{ data.text2 }}
15 | Edit components/HelloWorld.vue
to test hot module replacement.
16 |
17 |
18 |
19 |
37 |
38 |
43 |
--------------------------------------------------------------------------------
/front/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | createApp(App).mount('#app')
5 |
--------------------------------------------------------------------------------
/front/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()]
7 | })
8 |
--------------------------------------------------------------------------------