如何仅从命令行检查 JavaScript 代码的语法错误?

Posted

技术标签:

【中文标题】如何仅从命令行检查 JavaScript 代码的语法错误?【英文标题】:How can I check JavaScript code for syntax errors ONLY from the command line? 【发布时间】:2014-03-18 08:15:03 【问题描述】:

javascript 程序可以检查 IDE 中的错误或使用 online web apps,但我正在寻找一种方法来检测语法错误单独

我已经尝试过 JSLint 和 JSHint 并查看了它们的选项,但我找不到可以排除警告和 just shows the syntax errors 的组合。

如何从命令行检查 JavaScript 代码是否仅存在语法错误

【问题讨论】:

然后使用command line version of JSLint。 @DanDascalescu 比按照您想要的方式设置验证规则! jslint.com/lint.html#options @epascarello:你知道哪种 JSLint 选项组合只会输出语法错误吗? 这里是meta discussion about whether this question should be re-opened。 如果你熟悉 JavaScript,你可以简单地编辑/fork JSLint 并让它做你想做的事。并不像听起来那样令人生畏。代码非常干净。这个问题在iirc之前已经被问过了;您可能会发现您的纯错误 JSLint 项目非常受欢迎。 【参考方案1】:

我用acorn:

$ acorn --silent tests/files/js-error.js; echo $?
Unexpected token (1:14)
1

$ acorn --silent tests/files/js-ok.js; echo $?
0

通过以下方式安装:npm -g install acorn

【讨论】:

acorn 不适合我:Error: Cannot find module './_acorn.js' 也可以用apt install node-acorn安装在debian中【参考方案2】:

解决方案是启用 jshint 的 --verbose 选项,该选项显示错误或警告代码(例如,E020 表示 Expected '' to match ''W110 表示 Mixed double and single quotes),然后 grep 仅用于错误:

jshint --verbose test.js | grep -E E[0-9]+.$

【讨论】:

如果警告和错误太多,但您最终会收到“错误太多,退出”消息。您需要设置一个配置文件选项,例如 maxerr:10000 以避免这种情况,这并不理想。 @mynameistechno,您也可以在从命令行调用它时添加 --maxerr 10000,因为答案似乎已经暗示了。 jshint 2.9.4 似乎没有采用“--maxerr”参数——它被删除了吗?【参考方案3】:

JSHint 做你想做的事。 http://www.jshint.com/

您可以配置要显示的警告或错误。

一个例子:

$ jshint myfile.js
myfile.js: line 10, col 39, Octal literals are not allowed in strict mode.

1 error

【讨论】:

如何配置它以显示语法错误,而不是警告? 目前无法禁用 jshint 中的所有警告。您必须在配置文件中一一进行:/ 在 Mac OSX 上,可以使用以下命令安装:npm install -g jshint【参考方案4】:

任何 JavaScript 解析器都应该这样做,@cweise 提到的acorn 很好,因为它速度很快并且有一个--silent 开关。

您也可以使用 npm esprima 包中的 esvalidate:http://ariya.ofilabs.com/2012/10/javascript-validator-with-esprima.html

$ npm install -g esprima
$ esvalidate js-file-with-errors.js 
js-file-with-errors.js:1: Invalid left-hand side in assignment

【讨论】:

【参考方案5】:

这是持续集成方案的答案。

1- 使用排除文件夹、子文件夹和文件功能检查所有 JavaScript 文件。

2-如果有错误退出。

esvalidate --version || npm install -g esprima;
find ./ -not \( -path ./exclude_folder_1 -prune \) -not \( -path ./exclude/sub_folder -prune \) -not \( -path ./exclude/sub_folder_2 -prune \) ! -name exclude_specified_file.js  -name \*.js -exec esvalidate '' \; | grep -v "No syntax errors detected" && echo "Javascript Syntax error(s) detected" && exit 1;

【讨论】:

【参考方案6】:

您可以使用节点的内置语法检查选项:

node --check filename.js

参考:https://nodejs.org/api/cli.html#cli_c_check

【讨论】:

以上是关于如何仅从命令行检查 JavaScript 代码的语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行

如何使用命令行美化 JavaScript 代码?

如何从命令行检查 TypeScript 代码中的语法错误?

随机单词 Bash 脚本,如果提供一个数字作为第一个命令行参数,那么它将仅从具有那么多字符的单词中选择

如何在 PHP 发出的表格行中使用 JavaScript 检查所有复选框

如何使用 javascript 或 jquery 仅从字符串中获取所有 HTML 标记? [关闭]