使用 fileset 元素包含和排除文件或目录,可以包含 Ant 通配符。例如:
<fileset dir="./src" includes="**/*.js"/> <fileset dir="./src" includes="**/*.js" excludes="**/*-test.js"/>
filelist 元素需要明确指定要包含的文件。例如:
<filelist dir="./src" files="core/core.js"/>
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 后发现了上面的解决方法。
要想在代码验证失败时阻止任务继续往下执行,可以给 <java> 任务设置 failonerror = "true" 属性。
抽离可变的部分:
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>
导入 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 Options
Apache Ant
Rhino Documentation
Buildr
Improving Rhino CLI utility performance
JSHint 介绍