请考虑以下事项:
$ 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验证的代码。
答案 0 :(得分:2)
当然生成的JS文件不会传递jshint。
请记住,像jshint这样的工具的目的是指出您在代码中可能犯的错误。理论上,强制使用严格的JavaScript语法子集有助于防止您出错,并使您和其他人在将来更容易理解您的代码。
浏览器化和缩小化等工具的输出并不适合人类消费。 Minifiers有意利用技术上合法但人性不友好的语法,以实现最大的字节节省。
考虑:
if (iAmThirsty == true) {
drinkBeer();
}
通过重命名和语法转换的组合,缩小器可能会将其转换为:
t&&d()
由于&&
短路,这些做同样的事情。后者肯定不会通过jshint(或代码审查),但这无关紧要。你写了易于人类消化的东西,这就是将来会被修改的东西。
您永远不会使用已处理的输出;您将始终修改原始源并再次编译。 Jshint的存在是为了确保您的源是高质量的。在已处理的输出上运行它没有意义。