[原创]企业Web2.0项目开发必备 - http://code.google.com/p/jslint-toolkit/


引子
现在很多企业都上马了Web2.0项目,而Web2.0的一个重要特征就是AJAX交互。那么如何在企业Web2.0项目中对大量JavaScript脚本进行质量控制,是很多人头疼的问题。
著名的JSON数据交互格式的发明人Douglas Crockford在很久以前就开始关注这个问题,并给出了相应的解决方案 - JSLint,通过对JavaScript代码进行规范来减少BUG的数量。

但是JSLint一次只能对一个JavaScript文件进行验证,虽然Visual Studio, Aptana, Eclipse等著名的开发工具都有相应的JSLint的插件,但这些插件也仅限于个人使用。
如果能够对一个项目中的所有JavaScript文件进行验证,并给出直观的验证报告,将对项目中JavaScript的代码质量起到直观重要的作用。

JSLint-Toolkit闪亮登场
我最近开源了一个项目JSLint-Toolkit,可以方便的解决这个问题的。

为了让大家有个直观的感受,我们先介绍一下JSLint-Toolkit的使用方法:
  • 修改config.json
            {
        // JavaScript files to check
        "includes": ["scripts\\source", "scripts\\jquery-1.3.2.js"],
        // Exclude files
        "excludes": [],
        // Exclude file names
        "excludeNames": ["CVS"],
        // Output directory
        "outPath": "out"
        }
        

    这个配置文件的意思:对scripts\\source目录下的所有文件以及scripts\\jquery-1.3.2.js进行验证,忽略名称为CVS的文件夹或者文件,把结束输出到当前目录下的out子目录。
  • 双击run.bat运行:
  • 打开out子目录的index.htm文件: 

很简单吧。

对验证结果进行分类
有时会有很多错误(注意:这里的错误指的是JSLint的验证结果,是不合规范的地方,你可以在这里找到JSLint所使用的规范),
我们对错误进行了分级,这样有助于我们发现最严重的错误信息。

简单的把JSLint错误分为两类:Critical errors 和 Optional errors。
目前被划分到Critical Errors的有以下一些,我添加了简单的例子:
  • Missing semicolon.
        // BAD
        var appDiscuss = {
        cred: "",
        baseURL: "/mashup/webclient/community/discussion/"
        }
        // GOOD
        var appDiscuss = {
        cred: "",
        baseURL: "/mashup/webclient/community/discussion/"
        };
        
  • '{a}' is already defined.
        // 'title' is already defined.
        // BAD
        $.extend({
        confirm: function(info, call, title){
        var title = (title)? title : 'System';
        // ...
        }
        };
        // GOOD
        $.extend({
        confirm: function(info, call, title){
        title = title || 'System';
        // ...
        }
        };
        
  • Expected '{a}' and instead saw '{b}'.
        // Expected '{' and instead saw 'return'.
        // BAD
        if ($(this).attr('class')) return;
        // GOOD
        if ($(this).attr('class')) {
        return;
        }
        
  • Extra comma.
        // BAD
        var data = {
        name: "zhangsan",
        sex: "man",
        };
        // GOOD
        var data = {
        name: "zhangsan",
        sex: "man"
        };
        
  • Bad for in variable '{a}'.
        // Bad for in variable 'prop'.
        // BAD
        for (prop in headers) {
        }
        // GOOD
        for (var prop in headers) {
        }
        
  • Unnecessary semicolon.
        // BAD
        function validate() {
        };
        // GOOD
        function validate() {
        }
        
  • Bad line breaking before '{a}'.
        // Bad line breaking before '+'.
        // BAD
        var frame = '<div class="contentPane">'
        + '<div class="comments_show_hide panel_action">'
        + '</div></div>';
        // GOOD
        var frame = '<div class="contentPane">' +
        '<div class="comments_show_hide panel_action">' +
        '</div></div>';
        
  • Missing radix parameter.
        // BAD
        var val = parseInt("10,000".replace(/,/g, ""));
        // GOOD
        var val = parseInt("10,000".replace(/,/g, ""), 10);
        
  • '{a}' was used before it was defined.
        // 'plus' was used before it was defined.
        // BAD
        function add(a, b) {
        return plus(a) + b;
        function plus(a) {
        return a + 1;
        }
        }
        // GOOD
        function add(a, b) {
        function plus(a) {
        return a + 1;
        }
        return plus(a) + b;
        }
        


更详细的介绍可以从 http://code.google.com/p/jslint-toolkit/ 下载JSLint-Toolkit,在jslint-toolkit-rhino\doc\lint_msg.htm 中找到。


JSLint-Toolkit中使用的技术
JSLint-Toolkit使用了两项关键开源技术:JSLintRhino
以下是一个详细的列表:
  • Rhino
    Rhino (JavaScript in Java) is open source and licensed by Mozilla under the MPL 1.1 or later/GPL 2.0 or later licenses, the text of which is available at http://www.mozilla.org/MPL/
    You can obtain the source code for Rhino from the Mozilla web site at http://www.mozilla.org/rhino/download.html
  • JSLint
    JSLint is a JavaScript program that looks for problems in JavaScript programs. It is a code quality tool. http://www.jslint.com/
    We use the rhino version of JSLint, You can obtain the source code here: http://www.jslint.com/rhino/index.html
  • Qooxdoo
    Qooxdoo is a comprehensive and innovative Ajax application framework. No HTML, CSS nor DOM knowledge is needed. It is open source under an LGPL/EPL dual license.
    http://qooxdoo.org/
  • SyntaxHighlighter
    SyntaxHighlighter is a fully functional self-contained code syntax highlighter developed in JavaScript.
    http://alexgorbatchev.com/wiki/SyntaxHighlighter
  • jQuery
    jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development.
    http://jquery.com/


你还在等什么,试下呗......
posted @ 2009-08-21 21:54 三生石上 阅读(6796) 评论(20) 编辑 收藏

 回复 引用 查看   
#1楼2009-08-21 22:04 | 暗香浮动      
不错么 使用js比较担心各种浏览器的兼容问题。这个 不错
 回复 引用   
#2楼2009-08-21 22:21 | 破碎机[未注册用户]
好东西都在这里找到,不错不错
 回复 引用 查看   
#3楼2009-08-21 22:26 | Ming.Zhe      
试下呗......
 回复 引用 查看   
#4楼2009-08-21 22:59 | zoti      
好东西哦
 回复 引用 查看   
#5楼2009-08-21 23:07 | 代码乱了      
支持一下,看起来不错哦
 回复 引用 查看   
#6楼2009-08-21 23:07 | 代码乱了      
我记得用过一个VS的JsLint插件,直接和VS集成也很方便
 回复 引用 查看   
#7楼2009-08-21 23:39 | 阿K&LiveCai      
支持一下,
 回复 引用   
#8楼2009-08-22 01:13 | CCAV[未注册用户]
JsLint不错
引用阿K&LiveCai:支持一下,

引用代码乱了:我记得用过一个VS的JsLint插件,直接和VS集成也很方便

JsLint不错!

 回复 引用   
#9楼2009-08-22 01:29 | CCAV[未注册用户]
精华!!
 回复 引用   
#10楼2009-08-22 03:50 | 小牛多多[未注册用户]
引用暗香浮动:不错么 使用js比较担心各种浏览器的兼容问题。这个 不错

以前开发时,总是担心js的浏览器的兼容性,不知这个东西如何了啊?

 回复 引用 查看   
#11楼2009-08-22 08:19 | Kevin Zou      
去看看
 回复 引用 查看   
#12楼2009-08-22 08:36 | Kinglee      
不错,支持一下!
 回复 引用 查看   
#13楼2009-08-22 09:22 | Beggar      
能介绍一下 这种 "现在很多企业都上马了Web2.0项目,而Web2.0的一个重要特征就是AJAX交互。那么如何在企业Web2.0项目中对大量JavaScript脚本进行质量控制,是很多人头疼的问题。 "
具体如何实现呢?我以前自己写过一个测试的数据库的数据都是通过*.ashx返回的json 数据.
然后,前台在用js处理,但是这样会有一个问题.当要返回的数据多了的时候,就需要大量的与之对应的ashx文件?
可是,我有不知道有什么更好的设计方式?比如这些json如何统一管理?或者同意规划?
望您能给予指点.

 回复 引用 查看   
#14楼[楼主]2009-08-22 12:14 | sanshi      
引用Beggar:
能介绍一下 这种 "现在很多企业都上马了Web2.0项目,而Web2.0的一个重要特征就是AJAX交互。那么如何在企业Web2.0项目中对大量JavaScript脚本进行质量控制,是很多人头疼的问题。 "
具体如何实现呢?我以前自己写过一个测试的数据库的数据都是通过*.ashx返回的json 数据.
然后,前台在用js处理,但是这样会有一个问题.当要返回的数据多了的时候,就需要大量的与之对应的ashx文件?
可是,我有不知道有什么更好的设计方式?比如这些json如何统一管理?或者同意规划?
望您能给予指点.

.ashx其实只需要一个,然后通过POST的参数来区分,调用不同的业务实现。以前做雅客的时候就是这么干的。

 回复 引用 查看   
#15楼[楼主]2009-08-22 12:15 | sanshi      
引用小牛多多:
引用暗香浮动:不错么 使用js比较担心各种浏览器的兼容问题。这个 不错

以前开发时,总是担心js的浏览器的兼容性,不知这个东西如何了啊?

JS的兼容性可以通过使用JavaScript类库比如jQuery,Mootools来解决,和JSLint-Toolkit某关系哦。

 回复 引用 查看   
#16楼2009-08-22 16:51 | dytes      
好东西,支持一下!
 回复 引用 查看   
#17楼2009-08-22 18:13 | 小秦您好      
请问一下楼主:这个最新的版本,真的兼容IE7 吗?你短时间测试时兼容的,不过用端时间就不兼容了,我就遇到这个问题!以前在IE7上座测试搜索还可以,到了后来就不行了,原因 'ext.fly(...)' 不能为空,或者不是对象!请楼主在测试一下!
 回复 引用 查看   
#18楼[楼主]2009-08-23 11:06 | sanshi      
引用小秦您好:请问一下楼主:这个最新的版本,真的兼容IE7 吗?你短时间测试时兼容的,不过用端时间就不兼容了,我就遇到这个问题!以前在IE7上座测试搜索还可以,到了后来就不行了,原因 'ext.fly(...)' 不能为空,或者不是对象!请楼主在测试一下!

能不能把你的测试代码发到我的邮箱

 回复 引用 查看   
#19楼2009-08-23 14:04 | 小秦您好      
关键是你的邮箱我发不进去,你可以测试一下,你的邮箱要联系服务商才可以发送,所以,下载你的最新版本,在IE7上是没有按钮事件了!我测试了好长时间,我发不到你的邮箱,你可以加我的QQ:503684912 在周一我们一起测试一下,同时也可以稳固这个版本,我换成了IE8就没有问题了!其它的浏览器都可以!不知道这个请求可以实现不?
 回复 引用 查看   
#20楼[楼主]2009-08-23 15:43 | sanshi      
引用小秦您好:关键是你的邮箱我发不进去,你可以测试一下,你的邮箱要联系服务商才可以发送,所以,下载你的最新版本,在IE7上是没有按钮事件了!我测试了好长时间,我发不到你的邮箱,你可以加我的QQ:503684912 在周一我们一起测试一下,同时也可以稳固这个版本,我换成了IE8就没有问题了!其它的浏览器都可以!不知道这个请求可以实现不?

我的是Gmail邮箱,怎么会发不了呢:sanshi.ustc#gmail.com (把其中的#换成@)。
是哪个页面出现了问题,我可以先测试一下。还有我不用QQ的,如果想联系我可以用Gtalk。

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1551721 wFr8iNjduOY=