todos用yo来实现的说明
本文档的目的是通过一个todos的例子讲下如何用yo进行前端开发,包含开发流程全过程,涵盖:开发,构建,测试,调试,部署。规范前端开发的工作流,后续会补充单元测试的部分。
中间使用到的工具和框架
服务端:
- yo(express,一些必要的中间件)
- npm(安装node模块)
客户端:
- sea.js(客户端依赖包处理)
- SPM(客户端依赖包管理)
- gulp(项目构建,js,css,预处理,合并,压缩,部署)
- compass(css预编译)
- npm(工具依赖管理)
目录结构:
|
|
服务初始化的过程:
请求调用过程
开发步骤
准备:
- 安装必要的开发工具,当然先得安装node.js,具体参考这里。
- 安装compass,先安装ruby,参考这里
- 安装spm,运行
npm install spm@3.4.3 -g
(spm3.4.3之后使用了webpack,所以暂时用3.4.3)。 - 安装gulp,运行
npm install gulp -g
(如果安装了cnpm,可以替代npm)。 - 安装slush,运行
npm install slush -g
(用于创建空项目)。 - 安装slush-yo,运行
npm install slush-yo -g
(yo项目模板)。
新建一个空项目
|
|
在mac或者ubuntu上需要用sudo
。
运行空项目:
|
|
可以看到如图:
编写服务接口配置
需要存储todo list的服务,这个例子数据和状态主要保存服务端,
- 添加一个todo;
- 编辑一个todo;
- 获取todo列表;
- 切换todo的状态;
- 删除todo;
- 清除已完成的todo;
代码如下:
server/stub/router.js
|
|
可以用postman类似的http客户端测试下服务:
编写前端view对应后端服务的接口配置和接口适配
|
|
目前的todo的view只有一个,为了使不同状态的匹配加了”/:state”的路由。
后端映射到同一个接口。
后端服务也许无法满足你前端展示的要求,所以,会在适配层,加一些返回数据结构的处理。
适配层的业务注入规约:会找到interface的路由作为注入的原则(路由名称+请求方法),或者指定路由的适配的业务模块。
代码如下(server/adapters/index.js)
|
|
编写模板
拆解页面结构:
|
|
其中,header,todo/header,todo/section,todo/footer,todo/bottom,footer都是partials
采用handlebars模板编写。
当前后端返回数据时,在前端进行数据绑定生成HTML。
编写css样式
编写样式采用compass的方式,用compass watch,实时编译成css。
到client目录,直接compass watch
可以按照partials,拆分样式。
配置生成文件,在config.rb,或者使用gulp进行的构建。
编写JS前端逻辑
前端需要操作服务端的todo的内容,并且展现,主要是增删查改这些操作,同时绑定相关的事件。这个例子里面使用jquery和pjax等,所以需要在client
下的package.json
,添加依赖包:
|
|
需要执行spm install
。
前端的主要逻辑在js/todos.js
里面,代码如下:
|
|
整理联调
代码编写完成后,可以通过gulp start
,进行代码联调。
看看有没有问题,修复开发过程中疏漏的点。在yo中,如果是开发环境,会自动启用smp的服务,对于拆散js的组合调用,可以用chrome dev tool进行前端调试,后端调试,可以使用npm install -g node-inspector
,用node-debug app.js
进行服务端的代码调试。
服务端的express传参,和变量数据,可以通过express-debug
查看
构建项目
到此为止,已经把todos的功能已全部实现但是,工作流程,才走了一半,后面将会执行构建,将现有的项目,部署到测试环境,当测试环境测试没有问题,讲发布到生产。
而做这些事情,可以由gulp来完成,gulp可以编写管道式的构建过程,高效的将需要的自动化过程执行。
目前前端的gulp涉及如下的任务:
- 运行server
- compass的实时预处理
- js的合并和库文件的合并
- 样式的合并
- 部署到CDN
代码清单详见:client/gulpfile.js。
测试代码打包
|
|
测试环境运行
|
|
生产环境发布和运行
把代码部署到CDN
|
|
运行生产环境,需要保证服务不会挂掉,所以需要使用MP2来进行进程守护,以及服务监控和治理。
|
|
后续补充工作流
- 单元测试
- 持续集成
- 代码检查
后续待做事项
- 组件化
- 前后端分离(接口规范)
- docker化