JSHint 是不是支持异步/等待?
Posted
技术标签:
【中文标题】JSHint 是不是支持异步/等待?【英文标题】:Does JSHint support async/await?JSHint 是否支持异步/等待? 【发布时间】:2017-07-27 00:45:21 【问题描述】:我将 JSHint 用于 javascript 项目(使用 Visual Studio 代码)。在这个项目中,我使用了 async / await,JSHint 将其突出显示为错误。
我尝试设置 jshint,但“esversion”的最大版本似乎是 6。
jshint 支持 async/await 了吗?如果有,如何开启?如果没有,是否有任何解决方法?
【问题讨论】:
可能只使用 ESLint! 【参考方案1】:更新(2019 年 2 月):从 2.10.1 版本开始支持异步/等待。只需更新您的 .jshintrc 以使用
"esversion": 9
。 (+信息:Version changelog)
更新(2018 年 7 月):Async/await 将随着 JsHint 2.10.0 的发布而到来。 +信息:https://github.com/jshint/jshint/pull/3273
JSHINT 开发社区认为:
JSHINT 应该首先支持所有 ES6 语法,然后再开始实现 ES7 功能。 异步函数仅处于阶段 1,因此语法可能会发生很大变化
JSHINT-ESNEXT(包)
但是,有一个非官方的 JSHINT 包,其中包含 对 await/async 的实验性支持,称为 JSHINT-ESNEXT。
作者@marcominetti使用官方JSHint 2.7 Master分支并介绍了这个ES7特性,取自Seb Vincent esnextnext分支。
检查Npm Package 和source in github
安装:$npm install -g jshint-esnext
目前(2017 年 7 月),这是在 JSHINT 中支持 await/async 的唯一可用方法。
JSHINT 忽略(指令)
建议的常见解决方法或缓解做法是使用 JSHINT 忽略指令。
// Code here will be linted with JSHint.
/* jshint ignore:start */
// Code here will be ignored by JSHint.
/* jshint ignore:end */
或者:
ignoreThis(); // jshint ignore:line
当我们的代码有大量异步/等待引用时,我个人觉得这种缓解做法很脏而且令人困惑。但更令人困惑和肮脏的是 JSHINT 警告和错误 ;)
【讨论】:
感谢 Colix,这有帮助。但是现在(2018 年 4 月)呢? jshint 支持异步吗? 你是如何实际使用 jshint-esnext 的?安装后,你是否可以像jshint-esnext myscript.js
一样使用它?因为那对我不起作用。
要使用 JS 的最后一个特性,我建议使用 eslint 而不是 jshint。
如果您收到此错误:“'esversion' 和 'esnext' linting 选项的值不兼容”这是由于 esnext 已被弃用。所以从你的 jshint 文件中删除 esnext,你会很好的。来源:github.com/Microsoft/vscode-jshint/issues/49【参考方案2】:
jshint 支持 async/await 了吗?
不,截至 2017 年初还没有。
它似乎还不支持async/await
。从事 jsHint 工作的人们已经决定不支持 async/await
,直到标准处于后期阶段(显然之前因为在它们仍在变化时过早地支持事物而被烧毁) - 尽管已经存在实现(Babel,nodejs 等...... )。
如果您关注此jsHint open issue thread,截至 7 天和 11 天前的最近 cmets,它仍然是一个未解决的问题。
如果没有,有什么解决方法吗?
截至 2017 年 7 月,似乎有一个名为 jshint-esnext 的 jsHint 代码分支,在此处支持 async/await:https://www.npmjs.com/package/jshint-esnext。
【讨论】:
【参考方案3】:注意:按照“已接受的答案”中的建议使用分叉的 JSHINT-ESNEXT 包(NPM 和 github)需要设置“实验”选项。
/* experimental: [asyncawait] */
或
/* experimental: [asyncawait, asyncreqawait] */
详见源代码here。
【讨论】:
【参考方案4】:OP 询问是否有任何解决方法。这是一个混乱,但我已经用“async /**/”和“await /**/”替换了我所有的“async”或“await”。然后一个快速脚本将它们交换为 '/*async*/' 和 '/*await*/' 允许我使用 jshint 进行检查。
它不漂亮,但它喂牛头犬。
【讨论】:
以上是关于JSHint 是不是支持异步/等待?的主要内容,如果未能解决你的问题,请参考以下文章