如何仅从命令行检查 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 行
随机单词 Bash 脚本,如果提供一个数字作为第一个命令行参数,那么它将仅从具有那么多字符的单词中选择