├── .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 | [![](https://award.dovolopor.com?lt=License&rt=MIT&rbc=green)](./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 | 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 | 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 | --------------------------------------------------------------------------------