Декораторы с вавилоном, неожиданный токен

Я пытаюсь использовать декораторы для классов в React, используя babelify. У меня есть опция «es7.decorators», примененная в babel, но я продолжаю получать ошибку «неожиданный токен», когда она встречает символ «@».

У кого-нибудь есть идеи? Простой пример ниже.

Декоратор:

export default function(Component) {
  return class extends Component {
    constructor() {...}
  }
}

Учебный класс:

import myDecorator from 'decorator';

@myDecorator
class MyClass{...}

Я использую babelify (преобразование Browserify для Babel):

browserify().transform(babelify.configure({
  optional: ['es7.decorators']
})

person Lee    schedule 12.10.2015    source источник
comment
Как именно вы включили дополнительный преобразователь es7.decorators? Пожалуйста, предоставьте файл .babelrc и команду, которую вы используете для запуска или компиляции исходного кода ES7.   -  person Leonid Beschastny    schedule 12.10.2015
comment
browserify(...).transform(babelify.configure({ optional: ['es7.decorators'] }) Я знаю, что это работает, так как я получаю специфичную для декоратора ошибку, если добавляю точку с запятой после декоратора.   -  person Lee    schedule 12.10.2015
comment
Что ж, ваш код отлично работает для меня, значит, что-то не так с тем, как вы его запускаете/компилируете.   -  person Leonid Beschastny    schedule 12.10.2015


Ответы (2)


Спасибо @LeonidBeschastny за упоминание файла .babelrc, использование декораторов файла конфигурации работает правильно, использование настройки, описанной в файле readme babelify, не работает по какой-либо причине (не уверен, что моя настройка или что-то еще).

person Lee    schedule 12.10.2015
comment
Я думаю, вы должны принять свой ответ. По крайней мере, до тех пор, пока кто-нибудь не объяснит вам, почему babelify.configure не сработало так, как ожидалось. - person Leonid Beschastny; 12.10.2015

В случае, если кто-то еще столкнулся с этой проблемой, у меня была такая же проблема.

Я думаю, что критические изменения описаны здесь: http://babeljs.io/blog/2015/03/31/5.0.0/#babelrc

Все, что мне нужно было сделать, это добавить { "stage": 1 } в мой babelrc, который указывает, что Babel нужно скомпилировать с экспериментальными функциями, одной из которых является декоратор es7.

person deepfritz    schedule 09.11.2015
comment
Это было правильно для Babel начиная с v6, мой первоначальный вопрос был для v5. Однако теперь, похоже, вам нужно использовать babel-plugin-transform-decorators-legacy, чтобы заставить их работать, так как похоже, что поддержка декоратора была удалена из пресетов сцены (может быть неправильно, но мне пришлось добавить плагин, чтобы заставить их работать правильно). Может поможет кому! - person Lee; 07.01.2016
comment
и теперь мы переходим к bable 7, и у меня снова эта проблема - person light24bulbs; 24.06.2017