2015-11-16 26 views
51

Sto cercando di far funzionare il mio Browserify/Babelify/Gulp nel mio progetto, ma non ci vorrà l'operatore di spread.Browserify, Babel 6, Gulp - Token imprevisto sull'operatore di spread

ho ottenuto questo errore dal mio 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] 

Questo è il mio 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']); 

ho cercato di creare un file .babelrc, ma fanno la stessa cosa. E il mio script funziona quando cancello l'operatore di spread.

Questo è il file in cui si verifica il token Unexpected (abbastanza semplice).

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; 

    } 
} 

Non so che cosa non funziona in questo, ho letto alcune questioni su GitHub e la pagina di configurazione sul sito Babel, ma non riesco a farlo funzionare correttamente.

Qualcuno può mostrarmi come gestirlo correttamente? Grazie

risposta

120

Questa sintassi è una sintassi sperimentale proposta per il futuro, non fa parte di es2015 o react quindi è necessario abilitarlo.

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

e aggiungere

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

accanto al vostro attuale presets.

alternativa:

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

e utilizzare stage-3 nei tuoi preset per consentire tutte le fasi-3 funzionalità sperimentale.

+2

Ho usato http://babeljs.io/docs/plugins/preset-stage-2/! Grazie mille –

+0

@MikeBoutin loganfsmyth potresti specificare dove specificare come preset? Ho lo stesso problema, anche se io uso babelify via cli. Grazie –

+0

Via CLI hai bisogno di un file .babelrc e i preset sono nella pagina dei plugin sul sito babeljs –

17

Ho avuto lo stesso problema, installato fase-2 plug-in e modificato il mio file package.json, che si presenta come di seguito

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

grazie per aver incluso questo – skwidbreth

1

Proprio come una nota a margine, alcuni editor di testo (nel mio caso Mac Note) contratto ... in un'entità di elefanti, che fallirà la convalida, quindi sii consapevole anche di quello ...

+5

Dovresti cambiare l'editor di testo ... –

+0

Questo non è il mio editor di testo. È solo da qualche parte che a volte scarico blocchi di codice. : D – user1775718

+1

Vale la pena sottolineare che vari prodotti, inclusi prodotti Microsoft e cose come lo slack, spesso inseriscono i propri caratteri di formattazione speciali (che sono spesso nascosti) e/o convertono determinati caratteri per l'aspetto. Questo può essere davvero difficile da individuare e può causare problemi ... – user1775718

Problemi correlati