webpack4+vue2+axios+vue-router的多页+单页混合应用框架
VUE2的单页应用框架有人分享了,多页应用框架也有人分享了,这里就分享一个单页和多页的混合应用框架吧,初现雏形,还有很多需要优化和改善的地方。。。
结尾有github地址。
项目结构
│
├─build /* webpack的配置目录 */
│ ├─config.js /* 公共常量,用于配置文件 */
│ ├─utils.js /* 工具函数,用于配置文件 */
│ ├─webpack.base.conf.js /* 公共配置文件 */
│ ├─webpack.dev.conf.js /* 开发环境配置文件 */
│ └─webpack.prod.conf.js /* 生产环境配置文件 */
│
├──mock /* mock服务和mock数据 */
│ ├─api /* 存放mock数据 */
│ └─mock-server.js /* mock服务 */
│
├──src /* 项目源码 */
│ │
│ ├─api /* 所有后端接口 */
│ │ ├──index.js
│ │ └──product.js
│ │
│ ├─assets /* 公共的静态文件 */
│ │ ├─fonts
│ │ ├─img
│ │ └─style
│ │
│ ├─utils /* 业务无关的工具函数 */
│ │
│ ├─common /* 业务相关的公共函数 */
│ │ config.js
│ │ http.js
│ │
│ ├─components /* 公共组件, 如Dialog、Loading等 */
│ │ └─navbar
│ │
│ ├─pages /* 页面
│ │ │
│ │ ├─index/ 每个页面一个文件夹,当前页面的样式、图片、子组件都存放在自已的文件夹下。
│ │ │ 为了项目结构清晰,一级目录以模块划分,二级目录则为页面目录。
│ │ ├─my/ */
│ │ │ └─order/
│ │ │
│ │ ├─product/
│ │ │ └─list/
│ │ │
│ │ ├─App.vue /* 多页应用的公共入口页面 */
│ │ │
│ │ └─main.js /* 多页应用的公共入口函数 */
│ │
│ ├─router /* 路由配置 */
│ │ router.js
│ │
│ └─store /* 状态管理 */
│ │ actions.js
│ │ getters.js
│ │ index.js
│ │ mutation-types.js
│ │ mutations.js
│ │
│ └─modules
│
├─── .babelrc /* babel配置 */
├─── .editorconfig /* 开发工具配置 */
├─── index.html /* 公共模板文件 */
├─── package.json /* 包描述文件 */
└─── postcss.config.js /* postcss相关插件配置 */
项目简介
一个集 多页应用 + 单页应用 的混合项目框架。
适用于主要入口页面生成多页,子页面和次要页面使用单页形式的项目。
技术栈
项目打包说明
- npm模块(vue、vuex之类)打包成一个单独的js文件
- 公共组件和公共函数打包成一个单独的js文件
- 单页和多页,都按页面打包,即每个页面组件都打包成单独的js文件,按需加载
- 公共样式和各页面样式均各自打包成单独的css文件
如何配置多页?
"多页面"根据添加一个简单的入口文件(entry.js)即可自动生成html页面。
打包时,自动遍历"/src/pages/"目录,查找所有目录下的"entry.js"文件,
每个"entry.js"文件都作为一个单独的打包入口,每个入口生成单独的.html文件
多入口配置
在需要生成单独html页面的目录下新建一个entry.js文件,并引入一个公共的入口js文件 /src/pages/main.js,
给公共入口函数传递一个当前html页面默认要展示的页面组件。
入口示例
entry.js 入口文件,只需要修改要加载的页面组件即可,比如此例中的 ./list.vue
//导入公共入口文件 (必须)
import main from '@/pages/main'
//默认加载的页面组件 (必须)
import List from './list.vue'
//传递一个要展示的页面组件给公共入口函数 (必须)
main.init(List)
html模板
一个打包入口对应一个html模板。
所有页面默认使用项目根目录下的 /index.html 作为模板。
如果某个页面需要单独的html模板,可在其目录下新建名为 entry.html 的文件,打包时会自动将其识别为当前页面的模板。
注:只有在有入口文件(entry.js)的目录下添加单独的html模板,才有效。
单页配置
根据 vue-router 插件的路由配置 (./router/router.js) 来生成单页js文件。
每个html页面都是共用的同一个路由配置 (router.js文件) ,因此单页的页面组件可渲染在任意一个html中。
插件说明
此示例中没有使用 Generator函数 和 async/await,所以排除了对应的babel插件,打包文件也小了20几Kb,
如果你需要它们,可以在 .babelrc 文件中去掉排除项。
所用插件在package.json文件中可查看,具体插件功能及配置可到插件的npm包主页查看
安装插件
npm install
or
yarn install
开发&打包
执行以下命令预览非常简单的demo
//启动 Web 开发服务器与 Mock 服务器
npm start
//构建生产文件
npm run build
mock数据服务
概述
- 所有mock文件直接放在
./api目录的根目录下。(不支持子目录,可自行修改mock-server.js来实现) - mock文件名必须和接口文件名一致,才能将请求接口匹配上mock文件。
- mock文件可以是
.js文件或.jso文件,如果对同一接口分别创建了js和json两个mock文件,会优先取js文件的数据。 - json文件用来存放固定的mock数据,而js文件可更加自由的处理并返回mock数据。
- 修改api目录下的mock文件后,无需重启node服务,重新调用接口会返回新的数据。
启动mock服务
有两种方式:
1、执行命令 npm start 启动当前项目时,会自动启动mock服务(此为默认方式,在package.json中配置)。
$ npm start
2、手动执行node服务文件 ./mock/mock-server.js
$ node ./mock/mock-server.js
项目中使用mock接口
在配置文件 /build/webpack.dev.conf 中,使用webpack插件 webpack-dev-server 的代理属性 (proxy) ,将接口服务器转发到mock服务器。
mock服务器接收到转发过来的请求后,截取URL请求路径中的接口名,再用API接口的名字去匹配 ./mock/api 目录下的mock文件名,
最终返回mock文件中的数据。
mock文件命名规则
mock文件名必须和接口文件名一致
例1:
如果接口为 "/service/user/getUserInfo"
则mock数据文件名为 "getUserInfo.js" 或者 "getUserInfo.json"
例2:
如果接口为 "/service/user/getUserInfo.do"
则mock数据文件名为 "getUserInfo.do.js" 或者 "getUserInfo.do.json"
mock文件编写规则
API接口名.json 文件只支持json格式的数据,例:
{
"code": 1,
"msg": "失败",
"data":{
"age": 520,
"card": 10099
},
"servertime": 1534835882204
}
API接口名.js 文件必须导出一个函数,函数接收两个参数,需在函数中返回mock数据,例:
/*
返回mock数据
@param {object} getData 接口的GET数据
@param {object} postData 接口的POST数据
*/
module.exports = function(getData, postData) {
//to do something...
return {
code: 0,
msg: "成功"
data: {}
}
}
最后,框架源码地址:https://github.com/ahbool/vue-mix-pages,欢迎 +Star
demo很烂,将就着看吧 !-_-
在使用过程中如果发现有待优化的地方或者好的建议,欢迎提出。。。
webpack4+vue2+axios+vue-router的多页+单页混合应用框架的更多相关文章
- 基于Vue2.0+Vue-router构建一个简单的单页应用
爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6185492.html 一.介绍 vue.js 是 目前 最火的前端框架,vue.js ...
- Vue之vue自动化工具快速搭建单页项目目录
1 生成项目目录 使用vue自动化工具可以快速搭建单页应用项目目录. 该工具为现代化的前端开发工作流提供了开箱即用的构建配置.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构 ...
- bottle + vue.js 打造你的单页应用
看到各种单页应用之后,觉得单页应用简直酷毙了,作为一个技术宅,在假期的 时候恶补了一下vue ,觉得还不错,不过想想前端的东西毕竟还是太广博了.我也不知道怎么写反正应用起来有点别扭,就是资料太少了,成 ...
- vue router的浏览器跳转行为
最近做的项目中,涉及vue router 路由操作,其操作方法不同,产生的行为亦不同.本文通过对比实验,对其行为进行实验对比及总结,避免混淆. vue router的单页跳转的history模式,类似 ...
- 如何在vue单页应用中使用百度地图
作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案.三思而后行,这是一个好的习惯. 需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...
- 浅谈单页应用和多页应用——Vue.js向
浅谈单页应用和多页应用--Vue.js向 多页面 多页面应用:每次页面跳转,后台都会返回一个新的HTML文档,就是多页面应用. 在以往传统开发的应用(网站)大多都是多页面应用,路由由后端来写. 页面跳 ...
- 《移动Web前端高效开发实战》笔记4--打造单页应用SPA
路由是一个单页应用的核心,大部分前端框架都实现了一个复杂的路由库,包括动态路由,路由钩子,组件生命周期甚至服务器端渲染等复杂的功能.但是对于前端开发者而言,路由组件的核心是URL路径到函数的映射,了解 ...
- vue - 计算属性、表单输入绑定
计算属性 computed:{} <!DOCTYPE html> <html> <head> <title></title> </he ...
- 单页应用SPA开发最佳实践
最近用vue+vue-router做了个单页应用的项目,页面大概有15个左右.积累了一些开发经验在此做一些记录.本文主要从可维护性方面来考虑SPA的开发实践 全站的颜色定义放在一个less或者scss ...
随机推荐
- 剑指offer--23.合并两个排序的链表
时间限制:1秒 空间限制:32768K 热度指数:421239 本题知识点: 链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. class ...
- EditPlus保存时不生成bak文件(转)
如何设置EditPlus保存时不生成bak文件 EditPlus是一个强大的编辑工具,不单单是编辑文字强大,很多的刚开始学习编程语言的初学者会选择它,例如html,js,php,java.小编刚开始学 ...
- 【SQL查询】视图_view
转自:http://database.e800.com.cn/articles/2009/719/1248015564465_1.html 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同, ...
- FFmpeg再学习 -- 视音频基础知识
最近一直在看雷霄骅 FFmpeg 系列视频,然后将自己的理解总结一下. 参看:<基于 FFmpeg + SDL 的视频播放器的制作>课程的视频 一.视频播放器原理 自己理解: 比如一个 M ...
- GIL、死锁与递归锁
一.互斥锁 用互斥锁,目的:局部串行(保护自己的数据 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理(即 ...
- Ubuntu server 安装samba
安装Samba时,出现了一下问题: linux-image-generic***依赖出现问题,无法安装Samba. 使用apt-get update 更新,吓尿了,全部是忽略,源是系统自带的.改成其他 ...
- c语言编译执行过程
<h4>认识C编译执行过程</h4>认识C编译执行过程,是C学习的开端.简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标 ...
- bzoj 3598 方伯伯的商场之旅
Written with StackEdit. Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 \(i\) 的人面前 ...
- Net Core网络通信
Net Core网络通信 https://www.cnblogs.com/xxred/p/9859893.html 聊聊如何设计千万级吞吐量的.Net Core网络通信! 作者:大石头 时间:2018 ...
- NSArray四种遍历方法