eslint 错误无法读取 null 的属性“范围”

jcg*_*582 16 node-modules eslint

我已经有同样的 eslint 问题好几天了。

团队中的每个人都拥有相同的 eslintrc 和已安装的 eslint 版本。他们的 eslint 工作正常,我的不行。

我尝试重新启动我的计算机,删除 node_modules,删除我的用户下的任何内容(在主目录中)。什么都行不通。

问题:

./node_modules/.bin/eslint *.js* 
                                                                         ? 1 ? ? 11504 ? 10:19:47
Cannot read property 'range' of null
TypeError: Cannot read property 'range' of null
    at SourceCode.getTokenBefore (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/token-store/index.js:303:18)
    at checkSpacingBefore (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/rules/template-curly-spacing.js:52:42)
    at TemplateElement (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/rules/template-curly-spacing.js:117:17)
    at listeners.(anonymous function).forEach.listener (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/util/safe-emitter.js:47:58)
    at Array.forEach (<anonymous>)
    at Object.emit (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/util/safe-emitter.js:47:38)
    at NodeEventGenerator.applySelector (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/util/node-event-generator.js:251:26)
    at NodeEventGenerator.applySelectors (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/util/node-event-generator.js:280:22)
    at NodeEventGenerator.enterNode (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/util/node-event-generator.js:294:14)
    at CodePathAnalyzer.enterNode (/Users/jhill/gitRepo/sponsoroo/node_modules/eslint/lib/code-path-analysis/code-path-analyzer.js:608:23)
Run Code Online (Sandbox Code Playgroud)

细节

版本:

./node_modules/.bin/eslint --version  

v4.16.0
Run Code Online (Sandbox Code Playgroud)

.eslintrc

{
  "extends": ["airbnb-base", "plugin:security/recommended"],
  "rules": {
      "import/prefer-default-export": "off",
      "no-console": "off",
      "class-methods-use-this": "off",
      "global-require": "off",
      "consistent-return": "off",
      "import/no-extraneous-dependencies": ["error", {"devDependencies": true}],

      /* JSX */
      "jsx-quotes": [2, "prefer-double"],

      /* React */
      "react/display-name": 1,
      "react/jsx-boolean-value": 1,
      "react/jsx-no-duplicate-props": 1,
      "react/jsx-no-undef": 1,
      "react/jsx-quotes": 0,
      "react/jsx-sort-props": 0,
      "react/jsx-uses-react": 1,
      "react/jsx-uses-vars": 1,
      "react/no-danger": 1,
      "react/no-did-mount-set-state": 1,
      "react/no-did-update-set-state": 1,
      "react/no-multi-comp": 1,
      "react/no-unknown-property": 1,
      "react/prop-types": 1,
      "react/react-in-jsx-scope": 1,
      "react/self-closing-comp": 1,
      "react/sort-comp": 1,
      "react/wrap-multilines": 0,

      /* Security */
      "security/detect-non-literal-fs-filename": 2,
      "security/detect-non-literal-regexp": 2,
      "security/detect-unsafe-regex": 2,
      "security/detect-buffer-noassert": 2,
      "security/detect-child-process": 2,
      "security/detect-disable-mustache-escape": 2,
      "security/detect-eval-with-expression": 2,
      "security/detect-no-csrf-before-method-override": 2,
      "security/detect-non-literal-require": 2,
      "security/detect-object-injection": 2,
      "security/detect-possible-timing-attacks": 1,
      "security/detect-pseudoRandomBytes": 2,
      "no-unsafe-innerhtml/no-unsafe-innerhtml": 2
  },
  "parser": "babel-eslint",
  "plugins": [
    "babel",
    "react",
    "security",
    "no-unsafe-innerhtml"
  ],
  "env": {
    "jest": true,
    "browser": true,
    "es6": true,
    "node": true
  },
  "settings": {
    "import/extensions": {
      "webpack": {
        "config": "./webpack.config.react.js"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

另外,如果我从我的 .eslinrc 中删除 "parser": "babel-eslint",问题/错误就会消失,但我的 eslint 不起作用。我正在使用 ES6 语法。

更新:

我的解决方案是使用纱线而不是 npm。暂时解决了问题。

Ily*_*ich 21

这些 .eslintrc 规则为我解决了这个问题:

rules : {
  "template-curly-spacing" : "off",
  "indent": ["error", 2, {
    "ignoredNodes": ["TemplateLiteral"]
  }]
}
Run Code Online (Sandbox Code Playgroud)

  • 好的。只需记住在再次构建之前删除“node_modules/.cache” (4认同)
  • `"indent": ["error", 2, { "ignoredNodes": ["TemplateLiteral"] }]` 单独为我解决了这个问题。不错的收获!这个崩溃不应该被视为 eslint 中的错误吗? (3认同)
  • 不幸的是,这种方法违反了所有扩展规则。 (2认同)

小智 15

babel-eslint已被弃用,取而代之的是@babel/eslint-parser在这里阅读

以下是从 babel-eslint 升级到 @babel/eslint-parser 的步骤:

  1. 用@babel/eslint-parser 替换 babel-eslint:

新产品经理

npm uninstall babel-eslint babel-eslint-plugin
npm install --save-dev @babel/eslint-parser @babel/eslint-plugin
Run Code Online (Sandbox Code Playgroud)

yarn remove babel-eslint babel-eslint-plugin
yarn add --dev @babel/eslint-parser @babel/eslint-plugin
Run Code Online (Sandbox Code Playgroud)
  1. 升级 .eslintrc.js:
module.exports = {
    ---  parser: "babel-eslint",
    +++  parser: "@babel/eslint-parser"
    plugins: [
        ---   "babel"
        +++   "@babel
    ]
};
Run Code Online (Sandbox Code Playgroud)


Bra*_*ing 9

babel-eslint通过运行将 的版本修复为 7.2.3 或 8.0.1:

npm install --save-dev babel-eslint@7.2.3
Run Code Online (Sandbox Code Playgroud)

或者:

npm install --save-dev babel-eslint@8.0.1
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用这个方法,因为我的 babel-eslint 已经是 10.0.3 (11认同)

who*_*oan 8

正如@Vasan提到的,特别是在问题 530 上,这是帮助我解决问题的评论

最有可能的问题是导致错误的解析。

import(`some_path/${variable}`) // issue exists
Run Code Online (Sandbox Code Playgroud)

使固定

import("some_path" + variable) // issue fixed
Run Code Online (Sandbox Code Playgroud)