思考 - PC前端页面组件化架构设计
前言
设计范围
- PC前端项目
 - 如果需要前后端协同,需要可以预览的调试环境,服务器端渲染支持标签方式,ajax-cross
 - 考虑到PC前端浏览器的兼容性,技术用 bootstrap+jquery
 - js需要模块化开发,amd cmd commondjs es6
 
页面的抽象思考
基调
- 版本
 
xx.xx.xx
- 
    
字体
 - 
    
主色调
 
配置 1~5 种颜色,等级递减
元素
- 控件
 
文本、输入框、按钮、下拉框、日期框 等等
- 状态
 
hover、focus、disabled
组件
元素的组合,偏向于功能独立的模块
比如 导航栏、头像、卡片
组合
有组件+元素合并而成,更偏向于业务
比如用户登录框,商品列表
布局
栅格系统
页面
最终的融合,体现具体业务
如 首页、列表页、详情页
可配置的组件化实现
设计目标
- 按之前的分析,细化成低耦合的模块
 - 通过配置+编译进行发布
 - 符合4个原则:标准性、组合性、重用性、可维护性
 
技术采用
- 前端打包及构建工具
 
fis3
- css模块化
 
less sass stylus
- js模块化
 
require.js sea.js
- 包管理
 
npm
目录设计
带 * 目录/文件 名都是固定的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|--bower_components       | * 前端包目录(前端页面使用)
|--node_modules           | * node包目录(工具&工程化支撑 babel gulp)
|--bin                    | * 存放可执行二进制文件的目录
|--plugins                | * 手动下载整理的第三方包目录
|--components             | * 项目组件目录
|  |--css-modules         | * css模块目录
|     |--bootstrap-sass   | * bootstrap 重写元素目录
|        |--variables     | * 参数目录
|        |--variables.scss| * 参数汇总文件
|        |--mixins        | * 宏目录
|        `--mixins.scss   | * 宏汇总文件
|     `--sass             | * sass目录
|        |--skins         | * 皮肤目录
|        |--variables     | * 参数目录
|        |--variables.scss| * 参数汇总文件
|        |--mixins        | * 宏目录
|        `--mixins.scss   | * 宏汇总文件
|  |--js-modules          | * js模块化目录
|  `--ui-modules          | * 前端模块目录
|     |--header           | 一个组件一个目录(独立)
|        |--setup.json    | * 组件呈现用的默认json文件
|        |--header.html   | 存放组件的所有文件
|        |--header.js     | 组件的js文件
|        |--header.sass   | 可编译的 sass less 样式文件
|        `--logo.png      | 组件用到的图片
|     |--tab              |
|     |--footer           |
|     `--banner           |
|--pages                  | * 前端页面目录
|  |--index               | 一个页面一个目录(独立)
|     |--setup.json       | * 页面呈现用的默认json文件
|     |--index.html       | 存放页面所产生的所有文件
|     |--index.js         |
|     |--index.less       |
|     `--ad1.png          |
|  |--list                |
|  `--info                |
|--assets                 | * 资源目录,可以放在cdn上
|  |--img                 | * 图片
|  |--data                | * 数据
|  `--font                | * 字体
|--release                | * 发布目录
|  `--dist                | * 交付目录(产品独立包)
|--doc                    | * 文档目录
|--test                   | * 用于存放单元测试用例的代码
|--README.md              | * 项目说明文件
|--.gitignore             | * git过滤文件
|--.jshintrc              | * jshint语法检查配置
|--package.json           | * 包管理配置文件
`--fis-config.js          | * fis配置文件
sass 变量方式配置参数
变量分类成单独文件配置
skins目录下配置颜色
抽象固定的配色方案
- 蓝色主题
 
sass/skins/skin-blue.scss
1
variables目录下分类配置
- 颜色
 
sass/variables/colors.scss
1
2
3
4
5
6
7
8
// 3色 4色 配色方案
$master-color-0: #fff;//  白色:组件背景、反转字体、、
$master-color-1: #666;// 黑色:字体颜色、、、、
$master-color-2: #57bc4c;// 绿色:元素背景、反转、、、
$master-color-3: #474747;//  黑色:组件背景、反转字体、、
$master-color-4: #f60;// 橙色:高亮凸显、、、、
$body-bg: #f4f4f4;// 灰色:主体背景、、、
- 字体类型及大小
 
sass/variables/fonts.scss
1
2
3
4
5
6
7
8
9
10
11
$master-font: "Microsoft Yahei";  // “微软雅黑”
$font-size-base: 14px; //14px 基础大小
$font-size-16: ceil(($font-size-base * 1.14)); // 16px
$font-size-12: ceil(($font-size-base * 1.14)); // 12px
$font-size-h1: floor(($font-size-base * 2.6)); // h1:36px
$font-size-h2: floor(($font-size-base * 2.15));// h2:30px
$font-size-h3: ceil(($font-size-base * 1.7));  // h3:24px
$font-size-h4: ceil(($font-size-base * 1.25)); // h4:18px
$font-size-h5: $font-size-base;                // h5: 14px
- 间距
 
sass/variables/space.scss
1
2
3
4
$line-height-base: 1.428571429;  // 基础行高
$line-height-components: floor(($font-size-base * $line-height-base)); // 基础行高:20px
$gutter-width: 5px;    //重置列与列之间的间距,间距以此为基础
$min-height: 40px;     //组件的最小高度
- 配置汇总
 
sass/variables.scss
1
2
3
4
@import "./variables/colors";
@import "./variables/fonts";
@import "./variables/space";
...
sass 重复性定义采用mixins
mixins下放置sass宏
- form表单
 
sass/mixins/form.scss 采用参数方式传入
1
2
3
4
5
6
7
8
9
10
11
12
13
.search-form(@var1, @var2){
  .form-group{
    position: relative;
    margin-bottom:0;
    .input-search{
      position: absolute;
      top:($min-height * .9 - $font-size-h4 ) / 2 ;
      left: $gutter-width * 4 ;
      font-size: $font-size-h4;
      color: #bababa;
    }
    ...
  }
- 配置汇总
 
sass/mixins/mixins.scss
1
2
@import "./mixins/form.scss";
...
bootstrap sass 二次开发
目录文件方案同上
.gitignore 配置
1
2
3
4
5
6
7
8
*.DS_Store
*.log
*.zip
.idea
.sass-cache/
node_modules/
bower_components/
release/
package.json 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "name": "pc-web-fis3",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "directories": {
    "doc": "doc"
  },
  "scripts": {
    "start": "fis3 server start && fis3 release -wL",
    "release": "fis3 release",
    "dist": "fis3 release -d ./release",
    "open": "fis3 server open"
  },
  "author": "",
  "license": "ISC"
}
scripts 部分配置了fis3的cli
- 开启调试服务器
 
1
npm run start
- 更新开发内容
 
1
npm run release
- 发布到 release 目录文件方案同上
 
1
npm run dist
- 打开调试目录
 
1
npm run open
组件抽取
- 设计考虑
 
页面重用 以后可重用
- 顶部
 - 底部
 
