《编写可维护的 JavaScript》读书笔记第15章:校验
2014-01-05 18:58
423 查看
1. 查找文件
使用 fileset 元素包含和排除文件或目录,可以包含 Ant 通配符。例如:<fileset dir="./src" includes="**/*.js"/> <fileset dir="./src" includes="**/*.js" excludes="**/*-test.js"/>
filelist 元素需要明确指定要包含的文件。例如:
<filelist dir="./src" files="core/core.js"/>
2. 任务
JSHint 是用 JavaScript 编写,需要使用 Rhino 命令行 JavaScript 引擎执行它,从 http://www.mozilla.org/rhino 下载 Rhino,并把 js.jar 文件放在依赖文件夹里(lib.dir)。直接在命令行运行 JSHint:java -jar js.jar jshint-rhino.js [list of files] [options]
例如:
java -jar js.jar jshint.js curly=true,noempty=true core/core.js
注意:我自己写例子执行上面的命令总是会报异常,后来在 JSHint 网站上找到有人报了这个 ISSUE (https://github.com/jshint/jshint/issues/1333),并提供了一个修改后的 jshint.js(http://download-ln.jetbrains.com/idea/jshint/jshint-2.3.0.js ),这样我才把上面的命令跑起来。另外 ISSUE #1422(https://github.com/jshint/jshint/issues/1422)指出从 2.3.0 开始出现这个问题。我重新下载了 2.2.0 版后,果然问题没有了。
说明:参考相关文档后,发现像 "curly=true……“这样的选项是放在后面的,书中的例子都写在前面了。
直接执行命令行太原始了,要利用 Ant 进行构建,可以使用 <java> 任务代替上面的命令行。
说明:此书作者使用的 <apply> 任务,该任务在最新版的 Ant 中已经废弃,因此我这里的例子使用的是 <java> 任务。
示例:
<target name="validate"> <java jar="js.jar" fork="true"> <arg path="jshint.js"/> <arg path="core/core.js"/> <arg line="curly=true,forin=true,latedef=true,noempty=true,undef=true"/> </java> </target>
一次处理多个文件:
<target name="validate"> <fileset id="srcfileset" dir="${src.dir}" includes="**/*.js"/> <pathconvert property="srcfiles" pathsep=" " refid="srcfileset"/> <java jar="js.jar" fork="true"> <arg path="jshint.js"/> <arg path="${srcfiles}"/> <arg line="curly=true,forin=true,latedef=true,noempty=true,undef=true"/> </java> </target>
注:<java> 任务不支持 fileset ,参考了 http://ant.1045680.n5.nabble.com/List-of-file-names-as-arguments-to-a-java-task-td1341160.html 后发现了上面的解决方法。
3. 增强的目标操作
要想在代码验证失败时阻止任务继续往下执行,可以给 <java> 任务设置 failonerror = "true" 属性。4. 其他方面的改进
抽离可变的部分:js.jar 的位置
jshint.js 的位置
命令行参数
把它们定义到属性或者属性文件中再导入是更好的选择。下面是一个属性文件的例子:
src.dir = ./src lib.dir = ./lib rhino = ${lib.dir}/js.jar jshint = ${lib.dir}/jshint.js jshint.options = curly=true,forin=true,latedef=true,\ noempty=true,undef=true,rhino=false
这样就可以在目标中引用这些属性了。例如:
<target name="validate"> ... <java jar="${rhino}" fork="true" failonerror="true"> <arg path="${jshint}"/> <arg line="${srcfiles}"/> <arg path="${jshint.options}"/> </java> </target>
5. Buildr 任务
导入 Buildr.xml 文件后,通过 <fileset> 元素即可使用 <jshint> 任务。<target name="validate"> <jshint> <fileset dir="${src.dir}" includes="**/*.js"/> </jshint> </target>
也可以使用 options 属性来更改默认选项。
<target name="validate"> <jshint options="${jshint.options}"> <fileset dir="${src.dir}" includes="**/*.js"/> </jshint> </target>
说明:刚刚去 Buildr 官网看了下,2 年没有更新了,估计是没什么人气。
参考文档
JSHint 和 JSHint OptionsApache Ant
Rhino Documentation
Buildr
Improving Rhino CLI utility performance
JSHint 介绍
相关文章推荐
- 读书笔记:编写可维护的javascript
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 《编写可维护的 JavaScript》读书笔记第19章:自动化测试
- 《编写可维护的 JavaScript》读书笔记第10章:抛出自定义错误
- 《编写可维护的 JavaScript》读书笔记第20章:组装到一起
- 《编写可维护的 JavaScript》读书笔记第11章:不是你的对象不要动
- 《编写可维护的 JavaScript》读书笔记第12章:浏览器嗅探
- 《编写可维护的 JavaScript》读书笔记第13章:文件和目录结构
- 《编写可维护的 JavaScript》读书笔记第14章:Ant
- 《编写可维护的 JavaScript》读书笔记第16章:文件合并和加工
- 《编写可维护的 JavaScript》读书笔记第8章:避免“空比较”
- 《编写可维护的 Javascript》读书笔记(附录 A 部分):Javascript 编码风格指南(1)原始值
- 《编写可维护的 JavaScript》读书笔记第8章:避免“空比较”
- 《编写可维护的 JavaScript》读书笔记第17章:文件精简和压缩
- 《编写可维护的 JavaScript》读书笔记第7章:事件处理
- 《编写可维护的 JavaScript》读书笔记第7章:事件处理
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 《编写可维护的 JavaScript》读书笔记第18章:生成文档
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 如何编写可维护的面向对象JavaScript代码