写在前面

记得当时刷笔试题的时候有了解过“前端工程化”,无非就是用自动化工具帮助开发人员完成一些小细节,提高工作效率之类的,不过当时可没想到可维护性这么远

构建项目 -> 模块化开发 -> 复用 -> 测试 -> 调试 -> 验证 -> 发布 -> 版本控制,这整个流程的很多环节都可以用自动化工具解放人力,提高项目的可维护性

一.自动化的优缺点

js开发中使用自动构建系统的优缺点如下:

1.优点

  • 自动源码控制能够区分清楚用于调试的代码和将来发布的代码,开发阶段不必估计影响线上产品

  • 静态代码分析能自动完成(JSLint、JSHint)

  • 发布前可以进行多种方式的加工(合并文件、压缩代码)

  • 自动化测试,能很快发现错误

  • 很容易重做一次重复性的工作(比如再次合并文件、压缩代码)

2.缺点

  • 有些开发人员用不习惯,因为改动代码之后要重新构建一次,而不是传统的保存文件,刷新页面

  • 部署到线上的产品代码与开发阶段的代码不同,难以追踪bug

  • 经验不足的开发人员可能不会用这种自动构建系统

二.文件目录结构

一般不同的项目需要不同的目录结构,但下面给出的几条原则是广泛适用的:

  1. 一个对象对应一个文件

    避免多名开发人员修改冲突,文件越少,冲突的概率越大,一个对象对应一个文件能最小化这种风险

  2. 把相关文件用文件夹分组

    这样管理代码更容易根据功能定位对应代码

  3. 分离第三方代码

    最好用CDN引入第三方库,这样就不用对第三方代码进行多余的源码控制了

  4. 分离构建产物

    应该把构建的产物放在另一个文件夹里,不要进行源码控制,避免无意中反复构建带来的时耗

  5. 把测试代码放近点

    要把测试代码放在很容易找到的地方,比如和源码放在一起,或者test/目录下与源码路径相似的位置

三.自动化的步骤

1.使用自动构建工具

  • Ant:基于Java的

  • Buildy:基于NodeJS的

  • Gmake:UNIX粉喜欢的

  • Jammit:基于Ruby的

  • Jasy:基于Pathon的

  • Rake:基于Ruby的

  • Sprockets:基于Rack的

2.使用自动代码检查工具

  • JSLint:道格拉斯做的好工具

  • JSHint:和上面的差不多,但配置选项更多

3.使用自动合并/加工文件的工具

合并文件,插入版本号什么的,用第一步用的自动构建工具就能搞定

4.使用代码瘦身/压缩工具

瘦身和压缩的区别是瘦身是针对代码语法的优化,让源码更短;而压缩就是把纯文本的源码文件变成别的更小的文件,压缩后不能再编辑,除非先解压

瘦身工具比较多,作者推荐了几个:

  • YUI Compressor:Yahoo!的,基于Java,能缩短变量名、去掉空白字符、去掉注释,还能给CSS瘦身

  • Closure Complier:Google的,基于Java,能进行深层次优化(去掉不用的方法,把只用一次的方法扔进闭包),比YUI的瘦身效果更好

  • UglifyJS:基于NodeJS,还能合并var语句

5.使用文档自动生成工具

  • JSDoc:基于java的

  • YUI Doc:用js写的

  • 其它:Docco、Dojo Documentation Tools、JoDoc、Natural Docs、NDoc、PDoc

6.使用自动测试工具

  • YUI Test Selenium Driver:(作者总是喜欢把Yahoo!的东西排前面,好员工哇)YUI的单元测试框架

  • Yeti:利用各个浏览器进行js测试

  • PhantomJS:提供WebKit浏览器环境,可以配合QUnit和Jasmine

  • JsTestDriver:Google的单元测试框架,支持自动浏览器测试

  • Jasmine:行为驱动的js测试框架

  • QUnit:JQuery的单元测试框架

  • Selenium:功能测试框架,支持浏览器测试

7.把所有自动化工具整合起来

应该至少构建3个版本:

  • 开发版

    要求是尽量快,否则影响开发人员火力全开

    具体任务是:清理文件 -> 初始化构建环境 -> 检查代码 -> 合并文件

    注意:不要把自动测试环节放进来,因为费时间,开发版构建要求尽量快

  • 集成版

    用来排查错误,应该每隔一段时间运行一次检查并报告错误

    具体任务是:代码瘦身 -> 测试 -> 文档生成

    注意:文档生成环节是可选的,因为加进来可能会影响错误检查(错误可能来自文档生成环节)

  • 发布版

    要保证0错误,稳定可靠的产品

    具体任务是:加工文件(添上版本、版权信息等等)

    注意:可以考虑把部署等发布任务加进来,也可以选择把集成结果直接加工后部署,但要保证集成结果没问题

8.使用CI系统

CI(Continuous Integration)系统是用来增强对集成版的错误排查的,持续集成可以每隔一段时间自动运行并检查代码报告错误,甚至联系错误相关的具体开发人员

参考资料

  • 《Maintainable JavaScript》

后话

到这里整本书就结束了,这本书是淘宝UED博客推荐的,还算不错,也没有特别晦涩难懂的英文句子。

200页的书断断续续看了近3个星期,不算太慢,当然,在这期间还看完了《JavaScript语言精粹》、《The Book of CSS3》,学了SASS入门,写了10篇博文

JS自动化的更多相关文章

  1. css+js自动化开发之第十五天

    一.css上一篇的补充 1.position(页面分层) (1)fiexd将标签固定在页面的某个位置 position属性:top,left,right,bottom (2)relative+abso ...

  2. Node.js自动化技术实现(Java)

    Node.js自动化测试框架(NodeTestFramework):

  3. 从统计局采集最新的省市区镇数据,用js在浏览器中运行 V2

    本文描述的是对国家统计局于2019-01-31发布的<2018年统计用区划代码和城乡划分代码(截止2018年10月31日)>的采集. 相对于用于和采集2016版.2017版的js代码做了比 ...

  4. 15 个有趣的 JS 和 CSS 库

    开发者们,一起来看看有木有你需要的前端库. 1. DisplayJS DisplayJS 是一个帮助你渲染 DOM 的简易框架.使用它,你可以更容易地将 JS 变量遍历到特定的 HTML 元素中,类似 ...

  5. 从零搭建docker+jenkins 自动化部署环境

    从零搭建docker+jenkins+node.js自动化部署环境 本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker ...

  6. 【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署

    目录 一. 需求描述 二. 预备知识 IP+端口访问 域名访问 三. Nodejs应用的手动部署 四. 基于nodejs的自动部署 4.1 package.json中的scripts 4.2 自动化发 ...

  7. 【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署

    [摘要] node脚本实现轻量级自动化部署 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 需求描述 前端工程出包后实现简易的自动化部署. 二. ...

  8. fis-plus 学习笔记

    学习了一些fls-plus前端集成的东西:学的很皮毛,很多都是对官网的解释希望与大家分享,并能得到大家的指正. 参考文档:http://oak.baidu.com/fis-plus/document. ...

  9. [转] 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能

    这是一个创建于 738 天前的主题,其中的信息可能已经有所发展或是发生改变. 前言 vue2 正式版已经发布将近一个月了, 国庆过后就用在了公司的两个正式项目上, 还有一个项目下个月也会采用 vue2 ...

随机推荐

  1. IDEA 用了maven后的 智能提示 不出现问题,项目的依赖包没有加载依赖库中的问题。

  2. FTP\TFTP

    FTP是文件传输协议的英文简写. FTP 文件传输协议 基于TCP,20和21端口. TFTP 简单文件传输协议,基于UDP,69 只能传输32Mb以下文件,不需要提供账号和密码.tftp xxx.x ...

  3. PHP性能优化简述

    先谢慕课网,这里只做理论简述/** * PHP性能优化 * * 1.问题分析 * PHP语法使用不正确 * PHP不擅长的事 * PHP连接的服务不给力 * PHP自身短板 * 其它原因 * 2.PH ...

  4. char *p 与char p[] 比较

    看看下面的程序的输出: #include <stdio.h>char *returnStr(){    char *p="hello world!";    retur ...

  5. DIOCP网络通讯流程

    DIOCP 运作核心探密   原文连接: http://blog.qdac.cc/?p=2362 原作者: BB 天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出 ...

  6. __future__

    [__future__] __future__用于改变python特性. 参考:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb4 ...

  7. grep 和 wc命令 --- !管道命令!

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...

  8. 使用Aspose插件将程序中的表格,导出生成excel表格

    http://www.cnblogs.com/lanyue52011/p/3372452.html这个是原文地址 /// <summary> /// 点击按钮,将内存表导出excel表格! ...

  9. TFS与Eclipse、Microsoft Visual Studio等客户端以webservice进行交换。

    TFS与eclipse.Microsoft Visual Studio等客户端以webservice进行交互. 参考地址: http://server_ip:8080/tfs/项目区域/version ...

  10. PHP--目录处理

    __file___ dirname(): dirname()与__file__的组合:dirname(__file__)