JSLint是否可供脱机使用?

时间:2009-05-07 19:08:33

标签: javascript compiler-errors jslint lint

我想使用JSLint,但我对可以访问未经过滤的源代码的工具持谨慎态度。是否有离线版本或是否有其他类似工具可以对JavaScript进行“lint错误检查”?

编辑:一个带有GUI并显示错误的样式列表,而不是命令行界面?

17 个答案:

答案 0 :(得分:17)

如果您喜欢JSLint web interface,则可以执行File> Save Page As...Save as type: Web Page, complete(在Firefox中,在Internet Explorer中执行此操作可能会略有不同)到本地文件夹。

我将名称更改为jslint.htm以使其低于8.3且没有空格。

在本地保存似乎有效。

三件事:

  1. 这可能违反了他的许可证,虽然我保留版权完整,不修改他的任何代码,技术上我的网页浏览器已经在我的本地HD上创建了他的网站的副本,所以我不确定我是否是否违规,我不是律师,所以我会一直这样做,直到收到一封信告诉我要停止。
  2. 该页面可能仍然能够将您的代码发送到Internet,尽管它可能性很小。也就是说,WSH或Rhino版本可能比你在本地保存的网页上的版本更容易发送你提交给互联网的代码(如果你是偏执狂)。
  3. 你会落后于Douglas所做的任何错误修复或更新。但是,如果您不定期更新它们,同样适用于WSH或Rhino版本。

答案 1 :(得分:13)

JSLint可以使用WSH或Rhino离线运行:

http://www.jslint.com/lint.html#try

编辑:在问这个问题后的两年里,JSLint已经放弃了对Rhino和WSH的支持。我鼓励任何有兴趣使用linting代码的人也查看JSHint。它是JSLint的一个分支,旨在比原来更灵活,但也恰好支持Node,Rhino和WSH(当然还有浏览器)。

答案 2 :(得分:11)

是:

基本上,您只需要一个嵌入式JavaScript编译器来运行jslint.js

答案 3 :(得分:5)

还有另一个名为JavaScript Lint的JS Linter,它具有在线和可下载的命令行版本。我一直使用可下载的版本。我一直在考虑将它作为钩子的一部分集成到SVN中。我比JSLint更喜欢它,因为它有更多选项,似乎可以检测更多东西。它可以被配置为将某些标识符视为预定义的,用于工具包等,这允许它检查未定义变量的使用,我非常确定JSLint不能这样做。

答案 4 :(得分:4)

如果您在Java环境中,您可能会发现我的jslint4java工具很有用。它有一个命令行变体,也可以集成到一个ant脚本中。没有GUI,因为我对那些很糟糕。 : - )

答案 5 :(得分:3)

YSlow for Firebug内置了此功能

答案 6 :(得分:2)

我有一个工具,可以使用SpiderMonkey shell或Rhino从命令行运行JSLint。它还包含一个Vim插件,允许您在编辑文件时按下按钮自动突出显示任何问题行:

http://github.com/hallettj/jslint.vim/

答案 7 :(得分:2)

如果您使用TextMate,我已经创建了一个运行JSLint的包,并在图形窗口中显示输出。这一切都是独立的;没有其他东西需要安装才能使用它:

View JSLint.tmbundle at GitHub

答案 8 :(得分:1)

Cory Bennet a good post on command-line JSLint。您的大多数设置都将SpiderMonkey正常运行。如果你正在运行Linux,那就不那么糟糕;如果你使用Windows和Cygwin,那就更难了。这里有一些more discussion and comparison with Rhino run-times

更新:2013.11 - 如果您在命令行上使用node.js(为什么不使用?),您可以同时运行jslint和新的eslint。 [注意:我已经为eshint提供了错误报告和测试代码。]这些都比我上面的方式更容易设置....

答案 9 :(得分:1)

试试Google Closure Linter。它也有比JSLint更多的功能。

答案 10 :(得分:0)

有一个很棒的Yahoo Widget:

http://ajaxian.com/archives/jslint-multi

它是开源的,如果你是偏执狂,你可以审核代码。

alt text http://jslint-multi-widget.googlecode.com/files/jslint_multi_v1_scrshot.png

答案 11 :(得分:0)

我的部署脚本中有JSLint with Node.js validating code,以确保我不会意外地推送可能破坏我网站的代码。它可以节省大量时间来处理客户支持问题。

答案 12 :(得分:0)

如果你正在使用TextMate,JSLintMate包有一个简单的接口,支持JSLint和JSHint,并允许你以各种方式设置自定义选项(例如,每个项目的配置文件,所有项目的全球选择。)

JSLintMate screenshots

答案 13 :(得分:0)

如果你已经使用了ruby gems,那么你可以在一个命令中安装jslint gem: http://rubygems.org/gems/jslint

答案 14 :(得分:0)

由于JSLint本身是用JavaScript编写的,因此可以通过在本地复制HTML和引用的JavaScript文件来脱机运行它。 IE7的“另存为...”“网页,完整”功能就可以了。

答案 15 :(得分:0)

您也可以直接下载资源,而不是使用浏览器下载。这样做的好处是您可以使用版本控制系统更新它们,并阅读注释的源代码。

git clone https://github.com/douglascrockford/JSLint.git

这为您提供了HTML和JS源文件,但您不能按原样使用它们。按照README中的构建过程进行操作。简而言之,您需要git clone Douglas Crockford的其他两个JS项目,然后将所有三个git存储库中的一些JS文件连接(并最小化)到web_jslint.js

我是这样做的,使用YUI Compressor:

cat ../ADsafe/adsafe.js ../JSON-js/json2.js intercept.js jslint.js > /tmp/web_jslint.uncomp.js
java -jar ../../yuicompressor-2.4.7.jar /tmp/web_jslint.uncomp.js > web_jslint.js

然后使用浏览器打开jslint.html

答案 16 :(得分:0)

重新创建Crockford在JSLint.com上的内容非常容易。 JSLint.com's online version of the .js是一些文件的缩小集合,其中包含一些我不太了解的开销,例如that ADSAFE stuff。让我们把它剥离成一个最简单的案例包装器。

为JSLint构建自己的HTML包装器:

这是一个网页的代码,它将在同一目录中查找jslint.js(当前可以找到最新版本的JSLint in github here as raw text )并在与JSLint.com现在类似的方式。

<html>
    <head>
        <script src="jslint.js"></script>

        <script>
            function jslintalizeMe()
            {
                var i, divOut, errs, errsMsg = "";

                divOut = document.getElementById("errors");
                divOut.innerHTML = "";

                if (!JSLINT(document.forms[0].elements[0].value))
                {
                    errs = JSLINT.errors;
                    for (i=0; i < errs.length; i++)
                    {
                        err = errs[i];
                        if (null !== err)
                        {
                            if (undefined !== err.id)
                            {
                                errsMsg += "Error: " 
                                + err.code 
                                + " -- line " 
                                + err.line 
                                + " char " 
                                + err.character + "<br />"
                                + "    " 
                                + err.evidence + "<br />"
                                + "    " +
                                 err.reason + "<br /><br />\n";
                            }
                            else
                            {
                                errsMsg += err.reason;
                            }
                        }
                    }
                    divOut.innerHTML = errsMsg;
                }
            }
        </script>

    </head>

    <body>

        <form>
            <textarea rows="24" cols="80"
                placeholder="// Paste quality code here"></textarea>
            <br />
            <button onclick="jslintalizeMe();return false;">JSLint</button>
        </form>

        <div id="errors"></div>
    </body>
</html>

^来自an old blog post of mine

这取决于众所周知的读者,使GUI更具粘性,但这个报告以及JSLint网站现在都做了。

sample JSLint output from wrapper code