Подтвердить что ты не робот

Как настроить ESLint для использования методов класса стрелок класса

ESLint бросает ошибку Parsing error: Unexpected token =, когда я пытаюсь нащупать классы Es6. Какой параметр конфигурации я пропустил, чтобы включить методы класса класса стрелок в eslint?

Пример класса:

class App extends React.Component{
    ...
    handleClick = (evt) => {
        ...
    }
}

.eslint

{
  "ecmaFeatures": {
    "jsx": true,
    "modules":true,
    "arrowFunctions":true,
    "classes":true,
    "spread":true,

  },
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "rules": {
    "strict": 0,
    "no-underscore-dangle": 0,
    "quotes": [
      2,
      "single"
    ],
  }
}
4b9b3361

Ответ 1

Если вы хотите использовать экспериментальные функции (такие как стрелки как методы класса), вы должны использовать babel-eslint в качестве синтаксического анализатора. Параметр по умолчанию (Espree) не поддерживает экспериментальные функции.

Ответ 2

Из того, что я прочитал в сообщении об ошибке Parsing error: Unexpected token =, он выглядит больше, чем ошибка парсера, чем linter one.

Предполагая, что вы используете Babel в качестве вашего компилятора/транспилятора JavaScript и babel-eslint как ваш парсер ESLint, есть вероятность, что Бабель жалуется на синтаксис, а не на ESLint.

Вопрос не о функциях стрелок, а о чем-то более экспериментальном (ES7??), который, я думаю, называется инициализатор свойств или поле экземпляра класса (или оба:)).

Если вы хотите использовать этот новый синтаксис/функцию, вам нужно включить preset-stage-1 в Babel. Этот пресет включает плагин syntax-class-properties, который позволяет использовать этот синтаксис.

Подведение итогов:

  • Установите предустановку Babel:

    npm install babel-preset-stage-1
    
  • Добавьте этот пресет в список ваших пресетов (я полагаю, вы уже используете пресеты es2015 и react), либо в .babelrc, либо в babel-loader поле запроса, если вы используете webpack.

    "presets": ["es2015", "stage-1", "react"]
    

Ответ 3

Сегодня я столкнулся с той же проблемой.

Ответ на

и @dreyescat работает для меня.

По умолчанию, babel использует 3 пресета: es2015, react, stage-2

Снимок экрана с "Ошибка анализа: Неожиданный токен ="

Затем, если вы также выберите пресет stage-1, ошибка исчезнет

Снимок экрана без ошибок

Вы можете протестировать его на сайте bebeljs.io самостоятельно

Ответ 4

Ваш образец недействителен ES6, поэтому нет возможности настроить eslint, чтобы разрешить его

Ответ 5

handleClick - это метод класса, поэтому нет =:

class App extends React.Component{
  ...
  handleClick(evt) {
    ...
  }
}

если он статический, вы можете сделать:

class App extends React.Component{
  static handleClick = (event) => { }
}

и для привязки читать this или используйте автозавершение декоратора