本文以windows为例,介绍支持多个子系统的Vue工程项目的搭建过程,相对于单一系统的工程,多个子系统引入了如下一些问题:

  • 项目目录结构设计
  • 打包结果设计:每个子系统可以独立发布上线
  • 多布局实现:多种页面布局并存
  • 公共组件的分层组织

一、     Vue环境搭建和项目初始化(windows)

详细过程参见《Vue环境搭建和项目初始化(windows)

PS:npm建议V5.4.2以上,保证package-lock.json起作用,保证可重复构建,详解见相关文档

二、     npm模块安装和使用

1.    所有子系统通用的npm模块

这里是比较通用的模块,支持一个系统运行最基本的模块,基本上是最小组合(除ElementUI)

a)     axios

基于promise的HTTP库,可以用在浏览器和node.js中

i.          安装
npm install axios –save

b)     mockjs

模拟数据生成器,让前端独立于后端进行开发,返回模拟的响应数据。

i.          安装

npm install mockjs --save

c)     在vue2中使用mockjs与axios

全局使用axios避免引入麻烦https://zhuanlan.zhihu.com/p/29102204

i.          根据数据模板生成模拟数据。

ii.          生成响应数据

当拦截到匹配‘/msg’的 Ajax 请求时,函数msg.getMsg将被执行,并把执行结果作为响应数据返回

iii.          要在main中引入该项目所有请求使用mockjs模拟(重要

iv.          组件中使用axios调接口

d)     开发环境代理配置:(根据各自需要)

config/index.js文件中

{
dev:
proxyTable: {}
}

e)     element

组件库

i.          安装

npm install element-ui –save

ii.          使用

在 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)
});

f)      vuex

状态管理模式,记录登录状态,用户信息

i.          安装

npm install vuex –save

ii.          注册到根组件

iii.          store组织,拆分modules

2.    子系统特有npm

各个子系统由于业务不同可能包含各自单独需要的模块,这个根据具体业务需要决定

a)     子系统A

……

b)     子系统B

……

三、     同一个项目目录下包含多个子系统

1.    一个项目应该包含的内容

单页面的vue项目由main.js、App.vue、index.html三个核心文件组织构成,针对每个子系统单独建立这三个核心文件,最终单独打包,使每个子系统独立成为一个单页面vue工程。

文件名

说明

main.js

入口文件

App.vue

根组件template,每个具体页面均由APP.vue+路由指向的子组件构成

index.html

生成html入口文件模板

2.    vue项目中的webpack配置文件

使用脚手架创建的webpack标准模板项目中,webpack的配置文件位于项目/build目录下,结构如下:

文件

说明

webpack.base.conf.js

基础配置信息,开发、测试、生产环境共用。包含入口文件配置

webpack.dev.conf.js

开发环境配置信息。包含开发环境下html入口文件的配置

webpack.prod.conf.js

生产环境配置信息。包含生产环境下html入口文件的配置,以及公共库的打包配置

webpack.test.conf.js

测试环境配置信息

3.    基础配置:入口文件

以任务中心、个人中心两个子系统为例,分别配置两个子系统的入口文件,如上图

4.    生产环境配置

a)     配置html入口文件

针对每一个子系统生成其对应的一个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

b)     修改js、css文件输出路径

各个子系统的js和css文件输出到以各自名称命名的目录下,即,dist/[name]/static下

c)     公共模块单独打包

默认配置将node_modules中的依赖单独打包到vendor,暂时不需要修改和做单独配置,简单标明配置项。后续各个子系统单独的依赖需考虑打包策略

5.    开发环境配置

a)     配置html入口文件

开发环境下需要修改html入口文件模板配置即可,同生产环境,不要忘了'vendor'和'manifest'两个公共模块

6.    打包结果

a)     多文件打包结果

经过上述配置后打包结果如下图所示,各个子系统单独部署时需将子系统文件、mainfest、vendor、子系统html一同部署,多个子系统部署在同一服务器时mianfest与vendor可只部署一次。

b)     多文件访问路径

格式:http://{服务器IP或域名}:{端口号}/{模板名}.html#/{具体路由}

服务器IP或域名:各个子系统部署位置

模板名:各个子系统不同,根据html入口配置项有关

具体路由:各个子系统各自管理内部路由

例如:http://localhost:8080/task.html#/app

http://localhost:8080/personal.html#/personal

c)     原单文件入口打包结果(仅供参考对比)

7.    最终项目目录

d)     项目主目录

目录名

说明

build

Webpack打包配置文件目录

config

项目配置信息

dist

打包结果目录

node_modules

依赖包安装目录

src

项目代码目录

static

静态文件目录

template

入口html文件目录

test

单元测试文件目录

e)     项目代码目录

目录名

说明

assets

公共js、css文件

components

公共组件目录,所有子系统共用

modules

子系统模块目录

f)      子系统列表

目录名

说明

task_center

任务中心子系统

personal_center

个人中心子系统

……

……

g)     子系统内部项目目录

目录名

说明

api

接口代理文件目录

asset

静态资源目录

common

公共函数目录:子系统公共逻辑处理函数

components

公共组件目录:子系统公共组件

data

数据处理:各个页面的数据处理方法

mock

Mock服务:拦截ajax请求,根据模板模拟生成并返回数据

pages

页面目录:每个页面对应一个pages下级目录,包含页面级组件

router

路由目录

store

Vuex状态管理目录

App.vue

子系统根组件文件

main.js

子系统入口文件

8.    后续任务

对于打包构建这块目前做的还不够细致,还有一些其他优化可以做,记下来先

  • 自动构建入口函数
  • 单独发布打包指定某一个子系统
  • 子系统特有依赖模块打包策略

四、     elementUI自定义主题

官网说明:http://element-cn.eleme.io/2.3/#/zh-CN/component/custom-theme

1.    安装工具(全局安装)

npm install element-theme –g

2.    安装默认主题

在项目目录下执行命令:

npm i element-theme-chalk –D

3.    初始化变量文件

et –i

产生element-variables.scss文件

4.    修改变量

修改element-variables.scss文件中的色值等变量

5.    编译主题

et

此时,项目目录下会产生主题样式目录theme

6.    引入自定义主题

import '../theme/index.css'
import ElementUI from 'element-ui'
import Vue from 'vue' Vue.use(ElementUI)

7.    说明

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\页面

从零开始搭建包含多个子系统的Vue工程项目的更多相关文章

  1. 高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! EasyDSS 高性能流媒体服务器前端架构概述 EasyDS ...

  2. 从零开始搭建Vue组件库——VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  3. 从零开始搭建Vue组件库 VV-UI

    前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...

  4. 从零开始搭建一个vue.js的脚手架

    在谷歌工作的时候,我们要做很多界面的原型,要求快速上手,灵活运用,当时用的一些现有框架,比如angular,太笨重了——尤雨溪(Vue.js 作者) vue.js是现在一个很火的前端框架,官网描述其简 ...

  5. vue-用Vue-cli从零开始搭建一个Vue项目

    Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对 ...

  6. vue从入门到女装??:从零开始搭建后台管理系统(二)用vue-docute生成线上文档

    教程 vue从入门到女装??:从零开始搭建后台管理系统(一)安装框架 一个系统开发完成了总要有操作说明手册,接口文档之类的东西吧?这种要全部纯手写就很麻烦了,可以借助一些插件,比如: vue-docu ...

  7. 手把手教你使用VUE+SpringMVC+Spring+Mybatis+Maven构建属于你自己的电商系统之vue后台前端框架搭建——猿实战01

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  8. 从零开始搭建前端监控系统(三)——实现控制iframe前进后退

    前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...

  9. 从零开始搭建一个简单的基于webpack的vue开发环境

    原文地址:https://segmentfault.com/a/1190000012789253?utm_source=tag-newest 从零开始搭建一个简单的基于webpack的react开发环 ...

随机推荐

  1. Mac OS X下实现结束占用某特定端口的进程

    ---恢复内容开始--- 1.打开终端,使用如下命令: lsof -i:**** 以上命令中,****代表端口号,我们首先要知道哪个(或哪些)进程占用该端口,比如你可以运行 lsof -i:8000, ...

  2. python脚本4_求1到5阶乘之和

    #求1到5阶乘之和 # a = 1 sum = 0 for i in range(1,6): a = i*a sum = sum+a print(sum)

  3. 51nod 1486

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1486 1486 大大走格子 题目来源: CodeForces 基准时间限 ...

  4. Gradle 一(Android)

    参考一:Gradle 完整指南(Android) 参考二:深入理解Android(一):Gradle详解 参考三:Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) ...

  5. App如何推广秘籍之”渠道为王”

    现在市场上主流的APP从开发环境和搭载系统上来区分主要分为三种类型,它们是适用于iphone手机的ios版本.适用于安卓手机的 android版本和适用于window phone的WP8系统.由于每个 ...

  6. 【OpenGL ES】关于VBO(Vertex Buffer Object)的一些坑——解析一些关于glBuffer的函数

    最近在写毕设的时候用到OpenGL ES中的VBO,由于对一些接口用到的变量不了解被坑得很惨,在此记录一下防止以后再被坑. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cn ...

  7. 转: 更高的压缩比,更好的性能–使用ORC文件格式优化Hive

    Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是可切分(Split)的.因此,在Hive中使用OR ...

  8. 制作.bat文件运行指定目录的.bat或者exe

    上代码: goto start call "D:/Program Files/activeMQ/apache-activemq-5.3.2-bin/apache-activemq-5.3.2 ...

  9. 设计模式之享元(flyweight)模式

    现在在大力推行节约型社会,“浪费可耻,节俭光荣”.在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高.那 ...

  10. SSH项目配置数据源的方法(jndi)

    1.在tomcat6.0/conf/context.xml加入以下代码 [xhtml] view plain copy     <Resource name="jdbc/oracleD ...