JSX не допускается в файлах с расширением '.js ' с eslint-config-airbnb

Я установил eslint-config-airbnb это должно предварительно настроить ESLINT для React:

наш экспорт по умолчанию содержит все наши правила ESLint, включая ECMAScript 6+ и реагировать. Он требует eslint, eslint-плагин-импорт, eslint-plugin-react и eslint-plugin-jsx-a11y.

мой .eslintrc расширение конфигурации:

{ "extends": "eslint-config-airbnb",
  "env": {
    "browser": true,
    "node": true,
    "mocha": true
  },
  "rules": {
    "new-cap": [2, { "capIsNewExceptions": ["List", "Map", "Set"] }],
    "react/no-multi-comp": 0,
    "import/default": 0,
    "import/no-duplicates": 0,
    "import/named": 0,
    "import/namespace": 0,
    "import/no-unresolved": 0,
    "import/no-named-as-default": 2,
    "comma-dangle": 0,  // not sure why airbnb turned this on. gross!
    "indent": [2, 2, {"SwitchCase": 1}],
    "no-console": 0,
    "no-alert": 0,
    "linebreak-style": 0
  },
  "plugins": [
    "react", "import"
  ],
  "settings": {
    "import/parser": "babel-eslint",
    "import/resolve": {
      "moduleDirectory": ["node_modules", "src"]
    }
  },
  "globals": {
    "__DEVELOPMENT__": true,
    "__CLIENT__": true,
    "__SERVER__": true,
    "__DISABLE_SSR__": true,
    "__DEVTOOLS__": true,
    "socket": true,
    "webpackIsomorphicTools": true
  }
}

к сожалению, я получаю следующее сообщение об ошибке при пылеобразования на .файл JS с Реагировать код JSX внутри него:

 error  JSX not allowed in files with extension '.js'              react/jsx-filename-extension

разве eslint-config-airbnb не настроен реагировать на поддержку JSX уже, как указано ?

что нужно сделать, чтобы удалить эту ошибку ?

4 ответов


либо измените расширения файлов на .jsx Как уже упоминалось или отключить jsx-имя файла-расширение правило. Вы можете добавить следующее в свою конфигурацию, чтобы разрешить .js расширения для JSX.

"rules": {
  "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
}

это работа для меня. надеюсь помочь вам.

  1. отключить расширение JSX-filename в .eslintrc:

    "правила": { "react/jsx-filename-extension": [0] }

  2. на webpack.config.js:

    разрешить: { выдвижений.'[ :js','.jsx'] },


подробно Мартина!--5--> ответ, кажется, что в настоящее время невозможно использовать JSX в React Native. ПИАР был создан, но вернулся из-за опасений о фрагментации и неизвестных последствиях наличия таких вещей, как index.ios.jsx. Я не уверен, как AirBnb работает вокруг этого или если они это делают, но я использовал в основном то же самое rules блок, как Мартин.


Если вы не хотите изменять расширение файла, вы можете экспортировать функцию, возвращающую jsx, а затем импортировать и вызвать эту функцию в файле js.

// greeter.jsx

import React from 'react';

export default name => (
  <div>
    {`Hello, ${name}!`}
  </div>
);

а то

// index.js

import ReactDOM from 'react-dom';
import greeter from './components/greeter';

const main = document.getElementsByTagName('main')[0];

ReactDOM.render(greeter('World'), main);