12

我正在与我的eslint的一个小问题作斗争,它似乎在大多数情况下都能正常工作,但在某些情况下它不适用于 React 代码。

以这段代码为例:

const cellPLay = (name, src) => (
  <Table.Cell>
    <Modal trigger={<Button icon><Icon name="video play" size="large" /></Button>}>
      <Modal.Header>
        {name}
      </Modal.Header>
      <Modal.Content image>
        <Modal.Description>
          <video src={src} controls style={{ width: 910 }} />
        </Modal.Description>
      </Modal.Content>
    </Modal>
  </Table.Cell>
);

给出这样的错误:

/my-path/MyFile.js:18:7:预期缩进 8 个空格字符,但找到 6 个。 [错误/react/jsx-indent]

出于某种原因,eslint认为Modal.Content应该在Modal.Header之后缩进,但即使我修复了所有缩进,它也会询问它说某些结束标签的缩进是错误的:

预期的结束标记与开头的缩进匹配

我的 eslint 配置文件:

{
  "extends": "./my-eslint/index.js"
}

实际的 eslint 代码:

module.exports = {
  extends: require.resolve('eslint-config-airbnb'),
  env: {
    browser: true,
    jest: true,
    es6: true,
  },
  parserOptions: {
    ecmaVersion: 8,
    sourceType: 'module',
    ecmaFeatures: {
      jsx: true,
    },
  },
  rules: {
    strict: 'error',
    'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }],
    'no-plusplus': 'off',
    'jsx-a11y/media-has-caption': 'off',
    'jsx-a11y/anchor-is-valid': [
      'error',
      {
        components: ['Link'],
        specialLink: ['to'],
      },
    ],
  },
};

我尝试手动添加 jsx 缩进的规则

'react/jsx-indent': [2, 2],

没解决。

还有什么想法吗?

附带说明一下,VSCode 在缩进方面做得正确,但是当我手动运行eslint时它失败了,我需要修复它,因为正在运行代码样式自动化。我遵循了一些答案并在 VSCode 上安装了更漂亮的,现在他们似乎到了同一页面,但我需要解决缩进问题。

更新 1 正如@a-jar-of-clay 所建议的,我尝试将我的软件包升级到 eslint 到 5.4.0,airbnb 到 17.1.0,airbnb-base 到 13.1.0

现在我收到了新的错误消息,可能是由于一些不兼容:

错误:config-airbnb/rules/react.js:规则“re​​act/jsx-no-bind”的配置无效:值 {"ignoreRefs":true,"allowArrowFunctions":true,"allowFunctions":false,"allowBind" :false,"ignoreDOMComponents":true} 不应该有额外的属性。

更新 2 正如@matt-dell 所问,我用来手动运行的命令是:

./node_modules/.bin/eslint --fix --format unix  --config my-eslint/index.js

它肯定会选择我的配置,因为它会在我更改某些规则时做出反应。

4

1 回答 1

2

我遇到了同样的问题,我用一些软件包修复了它:通过使用 eslint 插件并扩展 react-app eslint,它得到了修复。

包.json

    "babel-eslint": "^7.2.3",

    "eslint": "^4.19.1",
    "eslint-config-react-app": "^2.1.0",
    "eslint-plugin-flowtype": "^2.50.1",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.11.1",

.eslintrc.js

 "env": {
    "browser": true,
    "es6": true
},
"extends": ["react-app", "eslint:recommended"],
"parserOptions": {
    "ecmaFeatures": {
        "experimentalObjectRestSpread": true,
        "jsx": true
    },
    "sourceType": "module"
},
"globals": {
    "React": true
},
"plugins": [
    "react"
],
"rules": {/* define your rules here...*/}

祝你好运!

于 2018-09-26T13:13:21.590 回答