IDEA version: 2021.2.1
eslint version: 8.0.1

今天用idea打开了create-next-app的项目发现idea抽风似的顶部顶了了大红条ESlint: TypeError: this.cliEngineCtor is not a constructor通过idea的日志查看到

TypeError: this.cliEngineCtor is not a constructor
    at ESLintPlugin.invokeESLint (C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\212.5080.55\plugins\JavaScriptLanguage\languageService\eslint\bin\eslint-plugin.js:103:25)
    at ESLintPlugin.getErrors (C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\212.5080.55\plugins\JavaScriptLanguage\languageService\eslint\bin\eslint-plugin.js:82:21)
    at ESLintPlugin.onMessage (C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\212.5080.55\plugins\JavaScriptLanguage\languageService\eslint\bin\eslint-plugin.js:56:64)
    at Interface.<anonymous> (C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\212.5080.55\plugins\JavaScriptLanguage\jsLanguageServicesImpl\js-language-service.js:105:39)
    at Interface.emit (node:events:390:28)
    at Interface._onLine (node:readline:487:10)
    at Interface._normalWrite (node:readline:661:12)
    at Socket.ondata (node:readline:269:10)
    at Socket.emit (node:events:390:28)
    at addChunk (node:internal/streams/readable:315:12)
Process finished with exit code -1

最开始通过idea点击进入报错代码定位到了无法new出这个实例, 在这个变量的上面 49行上

 this.cliEngineCtor = requireInContext(eslintPackagePath + "lib/api", state.packageJsonPath).CLIEngine;

是通过引入当前项目下的node_modules/eslint/lib/api下的一个CLIEngine类, 当我手动打开后发现api.js下并没有这个,我通过名称寻找到cli-engine/cli-engine.js跟引入的变量即为相似, 发现修改js后报错消除, 下面是修复代码

# 在原有的赋值下面加入, 为了防止更换版本后又出现错误
# 做一个小的兼容 
# IDEA下的\plugins\JavaScriptLanguage\languageService\eslint\bin\eslint-plugin.js
if(!this.cliEngineCtor) {
    this.cliEngineCtor = requireInContext(eslintPackagePath + "lib/cli-engine/cli-engine.js", state.packageJsonPath).CLIEngine;
}

如果我说错了, 请指出!