Javascript browserified文件是否不应通过jshint验证?

Javascript browserified文件是否不应通过jshint验证?,javascript,node.js,browserify,jshint,Javascript,Node.js,Browserify,Jshint,考虑以下几点: $ cat example.js function f () { return 1; } exports.F = f; $ browserify example.js > exampleBundle.js $ jshint --verbose example.js $ jshint --verbose exampleBundle.js exampleBundle.js: line 1, col 187, Missing semicolon. (W033) exampl

考虑以下几点:

$ cat example.js 
function f () { return 1; }
exports.F = f;
$ browserify example.js > exampleBundle.js 
$ jshint --verbose example.js
$ jshint --verbose exampleBundle.js 
exampleBundle.js: line 1, col 187, Missing semicolon. (W033)
exampleBundle.js: line 1, col 279, Missing semicolon. (W033)
exampleBundle.js: line 1, col 301, Missing semicolon. (W033)
exampleBundle.js: line 1, col 321, Missing semicolon. (W033)
exampleBundle.js: line 1, col 407, Missing semicolon. (W033)
exampleBundle.js: line 5, col 15, Missing semicolon. (W033)

6 errors
$ 
另外,不管它值多少钱,它都不会通过jshint验证

此外,我正在使用browserify的4.2.1版和jshint的2.5.6版:

$ browserify --v
4.2.1
$ jshint --v
jshint v2.5.6
$ 
最后,如果我修改
.jshintrc
文件以包含以下形式的语句(取自):

错误仍然存在

文章的第一版(开始)

在文章的第一个版本中,我收到一个错误,该选项不受支持:

example.js: line 0, col 0, Bad option: 'browserify'. (E001)
然而,正如所指出的,我运行的是2.5.3之前的jshint版本(特别是2.5.2)

文章的第一版(结束)


尽管如此,问题仍然存在:这是预期的吗?看起来browserify正在生成jshint无法验证的代码。

当然,生成的JS文件不会传递jshint

记住,像jshint这样的工具的目的是指出代码中可能犯的错误。理论上,强制使用JavaScript语法的严格子集有助于防止您出错,并使您和其他人在将来更容易理解您的代码

browserify和minification等工具的输出并非供人类消费。迷你们故意利用技术上合法但对人类不友好的语法来最大限度地节省字节

考虑:

if (iAmThirsty == true) {
    drinkBeer();
}
通过重命名和语法转换的组合,迷你们可能会将其转化为:

t&&d()
因为
和&
短路,它们做同样的事情。后者当然不会通过jshint(或代码审查),但这并不重要。你写了一些人类易于消化的东西,这就是将来要修改的东西


您将永远不会处理已处理的输出;您将始终修改原始源代码并重新编译。Jshint的存在是为了确保您的源代码是高质量的。在处理过的输出上运行它没有意义。

这很明显,但我还是要问。您有正确版本的jshint吗?链接提到了2.5.3版…谢谢。我确实在运行2.5.2,现在安装了2.5.6。然而,错误仍然存在(除了我在第一个版本的帖子中看到的
坏选项
消息)。如果您想要jshint,为什么不针对原始源文件运行它呢?我是这样做的,您是对的。事实上,我有一个用javascript编写的脚本(因此,它可以在任何平台上工作),我使用node调用它,这样我就可以自动生成捆绑包。使用了类似的脚本,以便我可以验证原始代码。因此,在这方面我没有问题。另一方面,问题是这是否是预期的行为。检查捆绑包时,jshint在抛出的“错误”上绝对正确。您尝试过我给出的示例吗?我不明白您的意思——您的示例只是针对browserify的处理输出运行jshint,这对于我上面概述的原因来说是没有意义的。不,因为browserify不是一个极小值,jshint验证代码;我们的浏览器运行的代码。特别是,jshint抱怨的第一条语句是:
抛出新错误(“找不到模块”+o+“”)
,其中缺少分号。此外,browserify还使用分号表示语句的结尾。换句话说,jshint抛出了一个完全有效的错误。browserify没有缩小代码(尽管它是),这并不重要,关键是browserify的输出不适合人类,因此在该输出上运行jshint是没有意义的。Browserify的包装器代码是预先缩小的。如果要在browserify包装器上运行jshint,请在上运行它。jshint不会验证浏览器运行的代码,而是验证人类编写的代码。
t&&d()