我有一些不同的javascript-snippets(几千个),其中一些在语法上有一些愚蠢的错误(比如不匹配的大括号/引号,javascript中的HTML,变量名中的拼写错误)。
我需要一种简单的方法来检查JS语法。我已经尝试过JSLint,但它发送了太多关于样式,变量定义方式等的警告(即使我关闭所有标志)。我不需要找出样式问题,或者提高javascript质量,我只需要找到明显的语法错误。当然我可以在浏览器/浏览器控制台中查看它,但我需要自动执行它,因为该片段的数量很大。
添加
JSLint / JSHint报告了很多问题,这些问题不是“美”但是有效(即有一些潜在的问题),并且看不到真正的问题,普通编译器只会报告语法错误并停止执行。例如,尝试使用JSLint代码,该代码在第4行(不匹配的引号),第6行(需要逗号)和第9行(意外< script>)上有语法错误。
document.write('something');
a = 0;
if (window.location == 'http://google.com') a = 1;
document.write("aaa='andh"+a+"eded"');
a = {
something: ['a']
something2: ['a']
};
<script>
a = 1;
答案 0 :(得分:2)
你可以尝试JSHint,这不那么冗长。
答案 1 :(得分:1)
我发现SpiderMonkey能够编译脚本而不执行它,如果编译失败 - 它会输出错误。
所以我刚为SpiderMonkey创建了小包装器
sub checkjs {
my $js = shift;
my ( $js_fh, $js_tmpfile ) = File::Temp::tempfile( 'XXXXXXXXXXXX', EXLOCK => 0, UNLINK => 1, TMPDIR => 1 );
$| = 1;
print $js_fh $js;
close $js_fh;
return qx(js -C -f $js_tmpfile 2>&1);
}
javascriptlint.com在我的情况下也非常好。 (感谢@rajeshkakawat)。
答案 2 :(得分:1)
万一有人还在寻找你可以试试Esprima,
它只检查语法,没有别的。
答案 3 :(得分:0)
如果您有做想要捕获的JSLint错误的详尽列表,那么有很多选项。
JSLint的代码实际上非常好并且相当容易理解(我假设你已经从你的问题中很好地了解了JavaScript)。你可以破解它只检查你想要什么,并且无论发现多少错误都可以继续。
您还可以在Node.js中快速编写内容,以便按原样使用JSLint快速检查每个文件/片段,并仅输出您关心的错误。
答案 4 :(得分:-1)
Semantic Designs'(我的公司)JavaScript格式化程序读取JS文件并格式化它们。您不需要格式化部分。
要读取它将格式化的文件,它使用完整的JavaScript解析器,它会进行完整的语法检查(甚至在正则表达式中)。如果您运行它并且只是忽略格式化结果,那么您将获得语法检查器。
你可以给它大的文件列表,它会格式化所有文件。您可以使用它来批量检查您的大型集。 (如果存在任何语法错误,则会向shell返回非零错误状态。)