23

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

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

4

17 回答 17

16

如果你喜欢JSLint Web 界面,你可以对本地文件夹执行File>Save Page As...Save as type: Web Page, complete(在 Firefox 中,在 Internet Explorer 中执行可能略有不同)。

我将名称更改为jslint.htm8.3 以下,没有空格。

在本地保存时似乎可以工作。

三件事:

  1. 这可能违反了他的许可,尽管我保留了版权并且没有修改他的任何代码,而且从技术上讲,我的网络浏览器已经在我的本地高清上创建了他网站的副本,所以我不确定我是否在违规与否,我不是律师,所以我会继续这样做,直到收到一封告诉我停止的信。
  2. 该页面可能仍然能够以某种方式将您的代码发送到 Internet,尽管它成为可能的可能性非常小。也就是说,WSH 或 Rhino 版本可能比本地保存网页中的版本更容易将您提交的代码发送到 Internet(如果您偏执的话)。
  3. 您将落后于 Douglas 所做的任何错误修复或更新。但是如果您不定期更新它们,同样的事情也适用于 WSH 或 Rhino 版本。
于 2009-05-07T19:32:09.917 回答
13

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

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

编辑:自从提出这个问题以来的两年里,JSLint 已经放弃了对 Rhino 和 WSH 的支持。我鼓励任何对 linting 代码感兴趣的人也可以查看JSHint。它是 JSLint 的一个分支,旨在比原来的更灵活,但也恰好支持 Node、Rhino 和 WSH(当然,除了浏览器之外)。

于 2009-05-07T19:10:30.063 回答
11

是的:

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

于 2009-05-07T19:12:56.017 回答
5

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

于 2009-05-07T19:54:40.283 回答
4

如果您在 Java 环境中,您可能会发现我的jslint4java工具很有用。它有命令行变体,也可以集成到 ant 脚本中。没有图形用户界面,因为我对这些很烂。:-)

于 2009-05-08T10:30:17.747 回答
3

YSlow for Firebug内置了这个功能

于 2009-05-07T19:11:02.697 回答
2

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

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

于 2009-05-07T20:12:09.743 回答
2

如果您使用 TextMate,我制作了一个运行 JSLint 并在图形窗口中显示输出的包。这一切都是独立的;无需安装其他任何东西即可使用它:

在 GitHub 上查看 JSLint.tmbundle

于 2010-10-06T17:38:08.000 回答
1

Cory Bennet 有一篇关于命令行 JSLint 的好帖子。您的大部分设置将使SpiderMonkey正常工作。如果您正在运行 Linux,那还不错;如果您使用的是 Windows 和Cygwin ,那就更难了。这里有更多的讨论和与 Rhino 运行时的比较

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

于 2009-06-10T01:51:39.897 回答
1

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

于 2012-03-20T19:44:29.820 回答
0

由于 JSLint 本身是用 JavaScript 编写的,因此您可以通过在本地复制 HTML 和引用的 JavaScript 文件来离线运行它。IE7 的“另存为...”“网页,完整”功能可以很好地做到这一点。

于 2009-05-07T19:37:10.730 回答
0

有一个很棒的 Yahoo Widget:

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

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

替代文字
(来源:googlecode.com

于 2010-04-08T12:51:18.073 回答
0

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

于 2011-01-04T16:09:02.060 回答
0

如果您使用 TextMate,则JSLintMate包具有简单的界面,同时支持 JSLint 和 JSHint 并允许您以各种方式设置自定义选项(例如,每个项目的配置文件,所有项目的全局选项)。

JSLintMate 截图

于 2011-05-20T17:31:40.083 回答
0

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

于 2011-12-14T15:20:10.623 回答
0

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

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

这为您提供 HTML 和 JS 源文件,但您不能按原样使用它们。按照中的构建过程README。简而言之,您需要git cloneDouglas 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用浏览器打开。

于 2012-07-15T00:00:11.420 回答
0

在 JSLint.com 上重现 Crockford 的内容非常容易。JSLint.com 的 .js 在线版本是一些文件的缩小组合,其中包括一些我不太了解的开销,比如那些ADSAFE东西。让我们将其剥离为一个最简单的案例包装器。

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

这是一个网页的代码,它将在同一目录中查找 jslint.js(最新版本的 JSLint 目前可以在 github 中以原始文本的形式找到),并以与 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>

^ 来自我的一篇旧博文

众所周知的读者可以让 GUI 变得更粘稠,但是这个报告和 JSLint 网站现在一样。

来自包装器代码的示例 JSLint 输出

于 2015-03-31T14:11:48.313 回答