web-dev-qa-db-ja.com

eslintは、名前付きエクスポートで予期しないトークンの解析エラーをスローします

次の名前のエクスポートが含まれているindex.jsファイルがあります。

export Main from './Main/Main'

ただし、eslintはこれを嫌い、エラーをスローします

Parsing error: Unexpected token Main

アプリが正常に動作している理由がわかりません。これは有効な構文だと思います。

私の.eslintrcファイルは次のようになります

{
  env: {
    es6: true,
    browser: true
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: "module",
    ecmaFeatures: {
      jsx: true,
      experimentalObjectRestSpread: true
    }
  },
  plugins: [
    "react",
  ],
  extends: ["eslint:recommended", "plugin:react/recommended", "standard"],
  "rules": {
    "comma-dangle" : [2, "always-multiline"],
    "semi": [2, "never"],
    "no-extra-semi": 2,
    "jsx-quotes": [2, "prefer-single"],
    "react/jsx-boolean-value": [2, "always"],
    "react/jsx-closing-bracket-location": [2, {selfClosing: "after-props", nonEmpty: "after-props"}],
    "react/jsx-curly-spacing": [2, "never", {"allowMultiline": false}],
    "react/jsx-max-props-per-line": [2, {maximum: 3}],
    "react/jsx-no-literals": 2,
    "react/sort-prop-types": 2,
    "react/self-closing-comp": 2,
    "react/sort-comp": 2
  },
}
11
Tyler McGinnis

理解した。これは実験的な機能なので、eslintパーサーとしてbabel-eslintを有効にする必要があります。

今私の.eslintrcはこのように見えます

{
  parser: "babel-eslint",
  env: {
    es6: true,
    browser: true
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: "module",
    ecmaFeatures: {
      jsx: true,
      experimentalObjectRestSpread: true
    }
  },
  plugins: [
    "react",
  ],
  extends: ["eslint:recommended", "plugin:react/recommended", "standard"],
  "rules": {
    "comma-dangle" : [2, "always-multiline"],
    "semi": [2, "never"],
    "no-extra-semi": 2,
    "jsx-quotes": [2, "prefer-single"],
    "react/jsx-boolean-value": [2, "always"],
    "react/jsx-closing-bracket-location": [2, {selfClosing: "after-props", nonEmpty: "after-props"}],
    "react/jsx-curly-spacing": [2, "never", {"allowMultiline": false}],
    "react/jsx-max-props-per-line": [2, {maximum: 3}],
    "react/jsx-no-literals": 2,
    "react/sort-prop-types": 2,
    "react/self-closing-comp": 2,
    "react/sort-comp": 2
  },
}
11
Tyler McGinnis

別の理由で同じエラーが発生したため、ここで問題が発生しました。

atomパッケージ開発でbabelを使用している場合、babelはすべてのファイルの先頭にあるuse babelによってアクティブ化されます。

use babelは、use strictと同様に、ファイルの先頭に配置する必要があります。その前のスペースがそれを非アクティブ化し、続いてjsエンジンがエクスポートステートメントまたは同様の「予期しないトークンのエクスポート」をトリップします。

違う:

use babel import { bla } from 'blub'

正しい:

use babel import { bla } from 'blub'

0