浏览器文件是否期望不通过jshint验证?

时间:2014-10-20 12:47:50

标签: 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)
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
$ 

另外,对于它的价值,jquery-1.11.1.min.js没有通过jshint验证。

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

$ browserify --v
4.2.1
$ jshint --v
jshint v2.5.6
$ 

最后,如果我修改.jshintrc文件以包含表单声明(取自here):

$ cat .jshintrc 
{
    "browserify": true
}
$ 

错误仍然存​​在。

帖子的第一个版本(BEGIN)

在帖子的第一个版本中,我收到一个错误,指出该选项不受支持:

example.js: line 0, col 0, Bad option: 'browserify'. (E001)

然而,正如我所指出的那样,我在2.5.3之前运行了一个jshint版本(特别是2.5.2)。

帖子的第一个版本(END)

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

1 个答案:

答案 0 :(得分:2)

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

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

浏览器化和缩小化等工具的输出并不适合人类消费。 Minifiers有意利用技术上合法但人性不友好的语法,以实现最大的字节节省。

考虑:

if (iAmThirsty == true) {
    drinkBeer();
}

通过重命名和语法转换的组合,缩小器可能会将其转换为:

t&&d()

由于&&短路,这些做同样的事情。后者肯定不会通过jshint(或代码审查),但这无关紧要。你写了易于人类消化的东西,这就是将来会被修改的东西。

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