2015-11-16 8 views
51

Ich versuche, meine Browserify/Babelify/Gulp in meinem Projekt arbeiten, aber es wird nicht die Spread-Operator.Browserify, Babel 6, Gulp - Unerwarteter Token auf Spread-Operator

habe ich diesen Fehler von meinem 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] 

Dieses

mein gulpfile.js ist
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']); 

Ich habe versucht, eine .babelrc-Datei zu erstellen, aber es das gleiche tun. Und mein Skript funktioniert, wenn ich den Spread-Operator lösche.

Dies ist die Datei, in der das unerwartete Token auftritt (ziemlich einfach).

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; 

    } 
} 

Ich weiß nicht, was in dieser nicht funktioniert, las ich einige Probleme auf Github und die Setup-Seite auf Babel Website, aber ich kann es nicht richtig funktioniert.

Kann mir jemand zeigen, wie man richtig damit umgeht? Danke

Antwort

120

Diese Syntax ist eine experimentelle vorgeschlagene Syntax für die Zukunft, es ist kein Teil von es2015 oder react, so dass Sie es aktivieren müssen.

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

und fügen

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

neben Ihrem presets bestehenden.

Alternativ:

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

und verwenden stage-3 in Presets alle Stufen-3 experimentelle Funktionalität zu aktivieren.

+2

Ich habe http://babeljs.io/docs/plugins/preset-stage-2/! Vielen Dank –

+0

@MikeBoutin loganfsmyth Könnten Sie bitte angeben, wo Sie es als voreingestellt angeben? Ich habe das gleiche Problem, obwohl ich Babelify über CLI verwende. Danke –

+0

Via CLI benötigen Sie eine .babelrc-Datei und die Voreinstellungen sind in der Plugins-Seite auf der Website babeljs –

17

hatte ich das gleiche Problem, installiert Stufe-2-Plugin und meine package.json Datei geändert, die wie

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

danke für die Aufnahme dieser – skwidbreth

1

nur als Randnotiz unten aussieht, einige Texteditoren (in meinem Fall Mac Anmerkungen) wird Vertrag ... in eine elepsis Einheit, die Validierung wird fehlschlagen, so darauf achten, auch ...

+5

Sie sollten Ihren Texteditor ändern ... –

+0

Das ist nicht mein Texteditor. Es ist nur irgendwo, wo ich gelegentlich Code-Blöcke ablege. : D – user1775718

+1

Es ist erwähnenswert, dass verschiedene Produkte, einschließlich Microsoft-Produkte und Dinge wie locker, oft ihre eigenen speziellen Formatierungszeichen einfügen (die oft ausgeblendet sind) und/oder bestimmte Zeichen für das Aussehen konvertieren. Das kann sehr schwierig zu erkennen sein und Probleme verursachen ... – user1775718