2016-03-25 4 views
9

У меня есть файл index.js, который имеет в названии указанный ниже экспорт.eslint бросает ошибку синтаксического анализа неожиданного токена на именованный экспорт

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 
    }, 
} 
+0

Это не действительный синтаксис, как вы можете убедиться, посмотрев на спецификации: HTTP: //www.ecma-international. org/ecma-262/6.0/index.html # table-42. Какое правильное решение зависит от того, что ''./Main/Main'' экспортирует и как оно это делает. –

+1

Это синтаксическое предложение, но вы должны включить его, я бы предположил. – loganfsmyth

+0

@FelixKling Ты прав. Получил идею отсюда https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/components/index.js Спасибо за головы! –

ответ

11

Фигурные его. Это экспериментальная функция, поэтому мне нужно включить babel-eslint в качестве анализатора 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 
    }, 
} 
+5

Если эта экспериментальная функция является единственной причиной, по которой вам требуется babel-eslint, и вы не хотите справляться с накладными расходами, вы можете использовать 'export {default as Main} из './Main/Main';', который действителен ES6 и отлично работает в парсере по умолчанию. – btmills

+0

@btmills Это отличная проницательность. Спасибо! –

+0

удивительный, это исправил ошибку для меня, THANKS – xckpd7

0

, так как я получил ту же ошибку по другой причине, вот где я пошло не так:

Если вы используете столпотворение с развитием атома пакета, babel активируется с помощью use babel в начале каждого файла.

use babel, как use strict должно быть в самом начале файла! Так как пространство перед ним дезактивирует его, а затем двигатель js отключается от вашего экспортного оператора или аналогичный `` `неожиданный экспорт токенов`````.

Неправильно:

use babel import { bla } from 'blub'

Правильно:

use babel import { bla } from 'blub'

Смежные вопросы