JSHint 抑制可选链接的错误

JSHint suppress error for optional chaining

当我发现 optional chaining (?.). I decided that I would need it in some code I was writing. When I finished typing out the code, I noticed that JSHint was giving me an error that stated Expected an identifier and instead saw '.'. (E030) jshint(E030). The following code runs without any error (MDN compatibility table) 时,我正在写一些 Javascript,但是 JSHint 仍然给出警告。

var x = {
  y: {
    z: 123
  }
};

console.log(x.y?.z)

我找到了另一个与此相关的Whosebug question,但是这个问题专门询问了ESLint,而这个问题是关于JSHint的。我还搜索了 JSHint GitHub 存储库的问题选项卡,但我找不到任何东西。有什么办法可以抑制这种错误?我正在使用 Visual Studio 内部代码。

编辑信息取自Code - Insiders > About Visual Studio Code - Insiders:

Version: 1.48.0-insider
Commit: d13d2fc56da7a2f8bcad4256212db0661fcbba45
Date: 2020-08-05T05:26:44.946Z (20 hrs ago)
Electron: 7.3.2
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Darwin x64 19.5.0

https://github.com/jshint/jshint/issues/3448 中有一个未解决的问题。

它建议“您可以使用 ignore:start/ignore:endignore:line 指令使 JSHint 传递它无法识别的任何语法。”

添加:"esversion": 11 到您的 jshint 文件。版本 11 中添加了可选链接。

用yarn升级好像不行

node -v
v16.2.0

.jshint 在项目文件夹中

cat .jshintrc 
{
    "-W138": true,
    "-W083": true,
    "esversion": 11
}

来自 package.json:

"grunt-contrib-jshint": "^3.0.0",
"jshint": "^2.13.1",

来自 gruntfile.js

jshint: {
    options: {
        "-W138": true,
        "-W083": true,
        "jshintrc": true,
        esversion: 11
    },
    files: ['src/js/**/*.js']
},

结果:

grunt jshint:files
if (response?.errCode != 200) {
             ^ Expected an identifier and instead saw '.'.

一些调查:

node_modules/grunt-contrib-jshint/node_modules/jshint/package.json
"repository": {
    "type": "git",
    "url": "https://github.com/jshint/jshint.git"
},

在存储库中是正确的 (2.13.1) 版本的 jshint 但在我的项目中它没有更新(仍然有 2.12.0)

解决方案 #1:

throw new Exception(response?.errMessage); /* jshint ignore:line */

解决方案 #2:

cd node_modules
cp -Rp jshint grunt-contrib-jshint/node_modules/