Fans
这是一个app(android/iOS)项目,但页面视图全部都用的是html5页,没有使用app的原生页面。 前端h5是基于mui + vue2 + vue-router2 + es6 + webpack2 + vuex + signalR 的前端webApp单页项目框架,项目可以直接在PC上运行html5页面。 app打包技术是用HBuilder IDE工具一键打包成APP。
Install / Use
/learn @yujinjin/FansREADME
前言
这是一个app(android/iOS)项目,但页面视图全部都用的是html5页,没有使用app的原生页面,项目可以直接在PC上运行html5页面。与服务端的交互全部都是走web api接口方式。客户端的登录是JSON WEB TOKEN 认证(JSON Web Token(JWT)是什么鬼)。项目里有android Apk打包文件,可以直接下载安装点此链接下载。
前端h5是基于mui + vue2 + vue-router2 + es6 + webpack2 + vuex + signalR的前端webApp单页项目框架。
app打包技术是用HBuilder IDE工具一键打包成APP,本项目使用了原生设备的的Storage和管理条码扫描。对于app的升级是html5资源在线升级更新,而不是整个APP更新。这些都是dcloud提供一整套技术解决方案。
本项目只是一个技术框架,对于项目中具体的业务的东西只会大概的说明一下。
说明: 可能有些朋友不知道signalR是什么东西,其实signalR就是让客户端(Web页面)和服务器端可以互相通知消息及调用方法的前端JS,当WebSockets可用时(即浏览器支持Html5)signalR使用WebSockets,当不支持时signalR将使用其它技术来保证达到相同效果。
前端UI的部分使用mui框架
app打包技术使用HBuilder IDE工具
原生App对设备的调用
使用vue-router2实现单页路由
使用.vue文件进行页面功能组件化的开发
使用vuex管理webApp的数据状态
使用signalR实现客户端与服务端长时间通信
使用webpack2实现对模块打包、压缩、混淆,预处理,热加载。
自己实现了一套路由机制,但它只适用于app中使用h5的header。
吐槽: 我想吐槽一下webpack2的webpack.config.js中各个插件配置,当时配置了好几天,这个loader配置好了,另外一个又出问题了,而且网上关于webapck2 API太少了,都是靠摸索着前进,真的是好难配。那有人肯定问了为啥不用VUE官方提供的vue-cli创建项目,我想说兄弟呀那个vue-cli是针对webpack1的,我想用webpack2(不要问我为什么,我就是固执的想用),而且官方配置的JS太TM的不直接了,10个配置文件我想改一些配置得看半天。
安装
-
下载HBuilder IDE开发工具,其实HBuilder是dcloud 把eclipse的改造成一个专门应用于app打包、多种语言支持:php、jsp、ruby、python、nodejs等web语言,less、coffee等编译型语言均支持的开发工具
-
下载node.js,作为前端web的运行环境。我当前的node.js版本是6.9.2 npm版本是3.10.9
-
app打包完全是基于manifest.json配置文件,它主要是用来配置app的基本信息(版本号、appid等)、图标(app的应用图标)、sdk配置、模块权限配置、页面引用关系、代码视图,具体参看dcloud提供的文档。
npm初始化
package.json内容如下
{
"name": "Fans",
"version": "1.0.0",
"description": "粉丝煲",
"main": "js/entrance.js",
"keywords": "粉丝煲",
"homepage": "",
"bugs": {
"url": "https://github.com/yujinjin/fans/issues",
"email": "yujinjin9@126.com"
},
"author": {
"name": "jinyu",
"email": "yujinjin9@126.com",
"url": "https://github.com/yujinjin"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/yujinjin/fans.git"
},
"scripts": {
"R_DEV": "set NODE_RUN=1&&webpack-dev-server --progress --watch --inline --host=0.0.0.0 --port 8083",
"B_DEV":"set NODE_ENV=dev&set NODE_RUN=0&webpack --progress --hide-modules",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
},
"dependencies": {
"vue": "^2.1.8",
"vue-resource": "^1.0.3",
"vue-router": "^2.0.1",
"vue-html-loader": "1.2.3",
"vue-loader": "10.0.0",
"vue-style-loader": "^1.0.0",
"vue-template-compiler": "^2.1.0"
},
"devDependencies": {
"vuex": "^2.0.0",
"autoprefixer": "^6.4.0",
"babel-core": "^6.0.0",
"babel-eslint": "^7.0.0",
"babel-loader": "^6.0.0",
"babel-plugin-transform-runtime": "^6.0.0",
"babel-preset-es2015": "^6.0.0",
"babel-preset-stage-2": "^6.0.0",
"babel-register": "^6.0.0",
"babel-polyfill": "^6.22.0",
"cross-env": "^1.0.6",
"css-loader": "^0.25.0",
"less": "^2.7.1",
"less-loader": "^2.2.3",
"file-loader": "^0.9.0",
"html-loader": "^0.4.4",
"html-webpack-plugin": "^2.24.1",
"jshint": "^2.9.4",
"jshint-loader": "^0.8.3",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"extract-text-webpack-plugin": "^2.0.0-beta.4",
"webpack": "^2.1.0-beta.25",
"webpack-dev-server": "^2.1.0-beta.10",
"webpack-require-http": "^0.4.0"
},
"engines": {
"node": ">=5.0.0",
"npm": ">=3.3.6"
}
}
开发环境依赖模块说明
vue //构建用户界面的
vue-resource //vue 的http ajax请求插件(本项目没有用它,暂时保留)
vue-router //vue 路由插件
vue-html-loader //vue html加载器
vue-loader //vue加载器
vue-style-loader //vue的样式加载器
vue-template-compiler //vue的模板编译器
vuex //组件状态管理
autoprefixer //css 浏览器兼容性问题处理
babel-core //ES6 代码转换器
babel-eslint //ES6的代码检查
babel-loader //ES6 代码转换器,webpack插件
babel-plugin-transform-runtime //和polyfill类似,替换助手函数
babel-preset-es2015 //ES6 代码编译成现在浏览器支持的ES5
babel-preset-stage-2 //ES6 ES7要使用的语法阶段
babel-register //用于改写require命令,为它加上一个钩子。此后,每当使用require加载.js、.jsx、.es和.es6后缀名的文件,就会先用Babel进行转码。
babel-polyfill //Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,babel-polyfill就是为当前环境提供一个垫片。解决一些浏览器不能识别的语法,比如:Promise
cross-env //解决跨平台设置NODE_ENV的问题
css-loader //css 生成
less //css 预处理器less
less-loader //css 预处理器less的webpack插件
file-loader //webpack的文件加载器,主要用于字体 将字体文件打包
html-loader //webpack的html加载器,主要用于html文件的加载
html-webpack-plugin //html 文件编译
jshint //Js代码检查工具
jshint-loader //webpack的jshint加载器,主要用于Js代码检查工具
style-loader //webpack的style加载器,主要用于css 插入到style标签
url-loader //webpack的url加载器,主要用于图片加载及限制
extract-text-webpack-plugin //把额外的数据内容加到编译好的文件中 (独立打包样式文件)
webpack //用来构建打包程序
webpack-dev-server //开发环境下,设置代理服务器
webpack-require-http //webapck打包环境下的requrire加载http文件的插件
项目目录说明
|-- build // webapck打包后的文件目录
|-- logo // 存放app的图表地址目录
|-- src // 源码目录
| |-- components // 存放公共组件的目录
| |-- member-qrcode.vue // 会员二维码公共组件
| |-- ... // 其他公共组件
| |-- css // 存放各种css文件目录
| |-- app.css // app的公用样式文件
| |-- icons-extra.css // icons的扩展字体样式
| |-- mui.css // mui框架css
| |-- ... // 其他css
| |-- fonts // 存放各种fonts文件目录
| |-- ... // 其他fonts文件
| |-- imgs // 存放各种图片文件目录
| |-- test // 存放开发测试的图片文件目录
| |-- ... // 其他测试图片文件
| |-- ... // 其他图片文件
| |-- js // 存放各种js文件目录
| |-- components // 存放各种js组件的目录
| |-- app-routers.js // 站点路由插件(只做路由的操作,不涉及实际的业务处理)
| |-- signalR.js // signalR组件
| |-- ... // 其他JS组件
| |-- config // 存放打包各种环境的目录
| |-- DEV.js // DEV环境配置文件
| |-- GQC.js // GQC环境配置文件
| |-- PRD.js // PRD环境配置文件
| |-- ... // 其他环境配置文件
| |-- lib // 第三方JS lib目录
| |-- mui.js // mui插件
| |-- ... // 其他第三方JS插件
| |-- services // app自己的业务目录
| |-- global-service.js // APP 全局业务逻辑方法,主要处理登录、登出的业务逻辑
| |-- store // vuex管理webApp的数据状态目录
| |-- index.js // app数据管理入口文件
| |-- app-data.js // app临时数据管理
| |-- app-event.js // app事件管理
| |-- router-status.js // app路由状态管理
| |-- utils // app的存放工具
| |-- directives.js // vue 自定义指令文件
| |-- log.js // app log日志
| |-- update.js // app在线更新
| |-- utils.js // app站点页面表单验证框架工具类
| |-- .... // 其他工具JS文件
| |-- app.js // app配置以及其他方法
| |-- entrance.js // app程序入口文件,加载各种公共组件
| |-- routers.js // vue的路由配置文件
| |-- json // 测试的json数据存放目录
| |-- less // 存放各种less文件的目录
| |-- app.less // app基础样式,包含其他less文件的入口
| |-- ... // 其他less样式文件
| |-- views // 存放各种页面视图组件目录
| |-- error // 存放错误视图组件目录
| |-- 404.vue // 404页面视图
| |-- users // 存放用户的视图组件目录
| |-- login.vue // 登录页面
| |-- user-center.vue // 用户中心页面
| |-- welcome.vue // 欢迎页面
| |-- ... // 其他视图页面
| |-- ... // 其他功能模块目录
| |-- app.vue // app页面入口文件
| |-- barcode.vue // barcode页面入口文件
| |-- home.vue // app首页面
| |-- index.html // app的html模板页面
|-- unpackage // app编译包目录
|-- .babelrc // ES6语法编译配置
|-- .editorconfig // 编辑器编码规范配置
|-- .gitignore // git忽略文件
|-- index.html // webapp的首页加载文件
|-- manifest.json // 打包app的配置文件
|-- package.json // 配置项目相关信息,通过执行 npm init 命令创建
|-- webpack.config.js // webpack配置文件
上图
1. app首次启动-欢迎页面
2. 登录页
