2015-11-16 24 views
51

Próbuję uzyskać mój program Browserify/Babelify/Gulp działający w moim projekcie, ale nie zajmie on operatora rozprzestrzeniania.Browserify, Babel 6, Gulp - Nieoczekiwany token na operatorze rozprzestrzeniania się

mam ten błąd z mojej 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] 

To jest moje 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']); 

próbowałem utworzyć plik .babelrc, ale zrobić to samo. A mój skrypt działa po usunięciu operatora rozprzestrzeniania.

Jest to plik, w którym występuje nieoczekiwany token (dość prosty).

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; 

    } 
} 

nie wiem co nie działa w tym, czytałem kilka problemów na Github i strony konfiguracji na stronie Babel, ale nie może to działać poprawnie.

Czy ktoś może pokazać mi, jak poprawnie postępować? Dziękujemy

Odpowiedz

120

Ta składnia jest eksperymentalną proponowaną składnią w przyszłości, nie jest częścią es2015 ani react, więc musisz ją włączyć.

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

i dodać

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

obok istniejącego presets.

Alternatywnie:

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

i używać stage-3 w swoich ustawień, aby umożliwić wszystkim etap-3 funkcjonalność eksperymentalną.

+2

Użyłem http://babeljs.io/docs/plugins/preset-stage-2/! Bardzo dziękuję –

+0

@MikeBoutin loganfsmyth Czy mógłbyś podać, gdzie określić to ustawienie? Mam ten sam problem, chociaż używam babelify przez cli. Dzięki –

+0

Przez CLI potrzebujesz pliku .babelrc, a ustawienia są na stronie wtyczek na stronie babeljs –

17

miałem ten sam problem, zainstalowany etap-2 wtyczki i zmodyfikowane mój plik package.json, która wygląda jak poniżej

"babel": { 
    "presets": [ 
     "es2015", 
     "react", 
     "stage-2" 
    ] 
    } 
+0

dzięki za uwzględnienie tego – skwidbreth

1

Podobnie jak marginesie, niektóre edytory tekstu (w moim przypadku Mac Notes) podpisze ... do encji elepsis, która nie przejdzie walidacji, więc bądź tego świadomy ...

+5

Powinieneś zmienić swój edytor tekstu ... –

+0

To nie jest mój edytor tekstu. To gdzieś, gdzie czasami zrzucam bloki kodu. : D – user1775718

+1

Warto podkreślić, że różne produkty, w tym produkty Microsoft i luki, często wstawiają własne znaki formatowania (które często są ukryte) i/lub konwertują określone znaki na wygląd. To może być naprawdę trudne do wykrycia i może powodować problemy ... – user1775718