本文以windows为例,介绍支持多个子系统的Vue工程项目的搭建过程,相对于单一系统的工程,多个子系统引入了以下一些问题:css
详细过程参见《Vue环境搭建和项目初始化(windows)》html
PS:npm建议V5.4.2以上,保证package-lock.json起做用,保证可重复构建,详解见相关文档前端
这里是比较通用的模块,支持一个系统运行最基本的模块,基本上是最小组合(除ElementUI)vue
基于promise的HTTP库,能够用在浏览器和node.js中node
npm install axios –save
模拟数据生成器,让前端独立于后端进行开发,返回模拟的响应数据。webpack
npm install mockjs --saveios
全局使用axios避免引入麻烦https://zhuanlan.zhihu.com/p/29102204git
当拦截到匹配‘/msg’的 Ajax 请求时,函数msg.getMsg将被执行,并把执行结果做为响应数据返回github
config/index.js文件中web
{
dev:
proxyTable: {}
}
组件库
npm install element-ui –save
在 main.js 中写入如下内容:
import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(ElementUI); new Vue({ el: '#app', render: h => h(App) });
状态管理模式,记录登陆状态,用户信息
npm install vuex –save
各个子系统因为业务不一样可能包含各自单独须要的模块,这个根据具体业务须要决定
……
……
单页面的vue项目由main.js、App.vue、index.html三个核心文件组织构成,针对每一个子系统单独创建这三个核心文件,最终单独打包,使每一个子系统独立成为一个单页面vue工程。
文件名 |
说明 |
main.js |
入口文件 |
App.vue |
根组件template,每一个具体页面均由APP.vue+路由指向的子组件构成 |
index.html |
生成html入口文件模板 |
使用脚手架建立的webpack标准模板项目中,webpack的配置文件位于项目/build目录下,结构以下:
文件 |
说明 |
webpack.base.conf.js |
基础配置信息,开发、测试、生产环境共用。包含入口文件配置 |
webpack.dev.conf.js |
开发环境配置信息。包含开发环境下html入口文件的配置 |
webpack.prod.conf.js |
生产环境配置信息。包含生产环境下html入口文件的配置,以及公共库的打包配置 |
webpack.test.conf.js |
测试环境配置信息 |
以任务中心、我的中心两个子系统为例,分别配置两个子系统的入口文件,如上图
针对每个子系统生成其对应的一个html入口文件,直接位于dist目录下。
这里有个坑,在每一个HtmlWebpackPlugin的chunks中必定要加入'vendor'和'manifest'两个公共模块,这样webpack才能正确识别项目的依赖关系,自动将公共模块引入到单页html中
HtmlWebpackPlugin插件的具体配置项含义参考官方文档
http://www.css88.com/doc/webpack2/plugins/html-webpack-plugin/
https://github.com/jantimon/html-webpack-plugin#configuration
http://www.cnblogs.com/wonyun/p/6030090.html
各个子系统的js和css文件输出到以各自名称命名的目录下,即,dist/[name]/static下
默认配置将node_modules中的依赖单独打包到vendor,暂时不须要修改和作单独配置,简单标明配置项。后续各个子系统单独的依赖需考虑打包策略
开发环境下须要修改html入口文件模板配置便可,同生产环境,不要忘了'vendor'和'manifest'两个公共模块
通过上述配置后打包结果以下图所示,各个子系统单独部署时需将子系统文件、mainfest、vendor、子系统html一同部署,多个子系统部署在同一服务器时mianfest与vendor可只部署一次。
格式:http://{服务器IP或域名}:{端口号}/{模板名}.html#/{具体路由}
服务器IP或域名:各个子系统部署位置
模板名:各个子系统不一样,根据html入口配置项有关
具体路由:各个子系统各自管理内部路由
例如:http://localhost:8080/task.html#/app
http://localhost:8080/personal.html#/personal
目录名 |
说明 |
build |
Webpack打包配置文件目录 |
config |
项目配置信息 |
dist |
打包结果目录 |
node_modules |
依赖包安装目录 |
src |
项目代码目录 |
static |
静态文件目录 |
template |
入口html文件目录 |
test |
单元测试文件目录 |
目录名 |
说明 |
assets |
公共js、css文件 |
components |
公共组件目录,全部子系统共用 |
modules |
子系统模块目录 |
目录名 |
说明 |
task_center |
任务中心子系统 |
personal_center |
我的中心子系统 |
…… |
…… |
目录名 |
说明 |
api |
接口代理文件目录 |
asset |
静态资源目录 |
common |
公共函数目录:子系统公共逻辑处理函数 |
components |
公共组件目录:子系统公共组件 |
data |
数据处理:各个页面的数据处理方法 |
mock |
Mock服务:拦截ajax请求,根据模板模拟生成并返回数据 |
pages |
页面目录:每一个页面对应一个pages下级目录,包含页面级组件 |
router |
路由目录 |
store |
Vuex状态管理目录 |
App.vue |
子系统根组件文件 |
main.js |
子系统入口文件 |
对于打包构建这块目前作的还不够细致,还有一些其余优化能够作,记下来先
官网说明:http://element-cn.eleme.io/2.3/#/zh-CN/component/custom-theme
npm install element-theme –g
在项目目录下执行命令:
npm i element-theme-chalk –D
et –i
产生element-variables.scss文件
修改element-variables.scss文件中的色值等变量
et
此时,项目目录下会产生主题样式目录theme
import '../theme/index.css' import ElementUI from 'element-ui' import Vue from 'vue' Vue.use(ElementUI)
theme目录及element-variables.scss文件需提交
vue-route中使用嵌套空的子路由。目前APP.vue只包含一个能够不使用命名视图,多个的状况考虑命名视图
布局属于平台级公共组件,位于src\components\layout目录下,以‘_layout.vue’结尾的文件是布局文件,布局组件位于comp子目录,具体结构见下图:
组件层级归属详细划分见文档《云质量V4.0前端组件分析.xlsx》最后一个页签《组件层级及项目归属》
项目目录结构组织见下表:
组件级别 |
所在项目目录 |
平台级公共组件 |
src\components |
子系统级组件 |
src\modules\子系统\components |
页面级组件 |
src\modules\子系统\pages\页面 |