it-swarm.com.ru

Browserify, Babel 6, Gulp - Неожиданный токен оператора спреда

Я пытаюсь заставить мой Browserify/Babelify/Gulp работать в моем проекте, но это не потребует оператора распространения.

Я получил эту ошибку из моего gulpfile:

[SyntaxError: /Users/mboutin2/Desktop/Todo-tutorial/src/reducers/grocery-list-reducers.js: Unexpected token (16:8) while parsing file: /Users/mboutin2/Desktop/Todo-tutorial/src/reducers/grocery-list-reducers.js]

Это мой gulpfile.js

var gulp = require('gulp');
var source = require('vinyl-source-stream');
var browserify = require('browserify');
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
var buffer = require('vinyl-buffer');
var babelify = require('babelify');

gulp.task('build', function () {
  return browserify({entries: './src/client/app.js', extensions: ['.js'], debug: true})
    .transform(babelify, {presets: ['es2015', 'react']})
    .bundle()
    .on('error', function (err) {
      console.error(err);
      this.emit('end');
    })
    .pipe(source('app.min.js'))
    .pipe(buffer())
    .pipe(sourcemaps.init({loadMaps: true}))
    .pipe(uglify())
    .pipe(sourcemaps.write('./'))
    .pipe(gulp.dest('./public/js'));
});

gulp.task('default', ['build']);

Я пытался создать файл .babelrc, но он делал то же самое. И мой скрипт работает, когда я удаляю оператор распространения.

В этом файле находится неожиданный токен (довольно просто).

import utils from '../utils/consts';

const initialState = {
  itemList: [
    {name: 'Apple', type: 'Fruit'},
    {name: 'Beef', type: 'Meat'}
  ]
};

export function groceryList(state = initialState, action = {}) {

  switch(action.type) {

    case utils.ACTIONS.ITEM_SUBMIT:
      return {
        ...state,
        itemList: [
          ...state.itemList,
          {name: action.name, type: action.itemType}
        ]
      };

    default:
      return state;

  }
}

Я не знаю, что не работает в этом, я прочитал некоторые проблемы на Github и странице установки на веб-сайте Babel, но я не могу заставить его работать правильно.

Может кто-нибудь показать мне, как справиться с этим правильно? Спасибо

73
Mike Boutin

Этот синтаксис является экспериментальным предложенным синтаксисом для будущего, он не является частью es2015 или react, поэтому вам необходимо его включить.

npm install --save-dev babel-plugin-transform-object-rest-spread

и добавить

"plugins": ["transform-object-rest-spread"]

в .babelrc вместе с вашим существующим presets.

В качестве альтернативы:

npm install --save-dev babel-preset-stage-3

и используйте stage-3 в своих пресетах, чтобы включить все экспериментальные функции этапа 3.

157
loganfsmyth

У меня была та же проблема, я установил плагин stage-2 и изменил мой файл package.json, который выглядит как ниже

"babel": {
    "presets": [
      "es2015",
      "react",
      "stage-2"
    ]
  }
21
Devnegikec

Как примечание, некоторые текстовые редакторы (в моем случае Mac Notes) заключат ... в сущность elepsis, которая не пройдет валидацию, так что помните об этом тоже ...

3
user1775718