2015-11-16 19 views
51

Tôi đang cố gắng để Browserify/Babelify/Gulp làm việc trong dự án của mình, nhưng nó sẽ không lấy toán tử lây lan.Browserify, Babel 6, Gulp - Mã thông báo không mong muốn trên toán tử spread

Tôi đã nhận lỗi này từ gulpfile tôi:

[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] 

Đây là gulpfile.js tôi

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

tôi đã cố gắng để tạo ra một tập tin .babelrc, nhưng nó làm điều tương tự. Và kịch bản của tôi hoạt động khi tôi xóa toán tử spread.

Đây là tệp xảy ra mã thông báo không mong muốn (khá đơn giản).

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; 

    } 
} 

Tôi không biết điều gì không hiệu quả, tôi đã đọc một số vấn đề trên Github và trang thiết lập trên trang web Babel, nhưng tôi không thể làm cho nó hoạt động chính xác.

Có ai có thể chỉ cho tôi cách xử lý chính xác không? Cảm ơn bạn

Trả lời

120

Cú pháp đó là cú pháp được đề xuất thử nghiệm cho tương lai, cú pháp này không phải là một phần của es2015 hoặc react vì vậy bạn sẽ cần phải bật cú pháp đó.

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

và thêm

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

cùng với hiện tại của bạn presets.

Hoặc:

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

và sử dụng stage-3 trong cài đặt trước của bạn để cho phép tất cả các giai đoạn-3 chức năng thực nghiệm.

+2

Tôi đã sử dụng http://babeljs.io/docs/plugins/preset-stage-2/! Cảm ơn bạn rất nhiều –

+0

@MikeBoutin loganfsmyth bạn có thể vui lòng chỉ định nơi để xác định nó như là cài sẵn? Tôi có cùng một vấn đề, mặc dù tôi sử dụng babelify qua cli. Cảm ơn –

+0

Thông qua CLI, bạn cần tệp .babelrc và các cài đặt trước nằm trong trang bổ trợ trên trang web babeljs –

17

tôi đã cùng một vấn đề, cài đặt sân khấu-2 plugin và chỉnh sửa tập tin package.json của tôi, trông giống như dưới đây

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

cảm ơn bạn đã bao gồm điều này – skwidbreth

1

Cũng giống như một mặt lưu ý, một số soạn thảo văn bản (trong trường hợp của tôi Mac Notes) sẽ ký hợp đồng ... thành một thực thể elepsis, sẽ không xác thực được, vì vậy hãy lưu ý rằng ...

+5

Bạn nên thay đổi trình soạn thảo văn bản của mình ... –

+0

Đó không phải là trình soạn thảo văn bản của tôi. Nó chỉ là một nơi nào đó tôi thỉnh thoảng đổ khối mã. : D – user1775718

+1

Điều đáng nói là các sản phẩm khác nhau, bao gồm các sản phẩm microsoft và những thứ như slack, thường chèn các ký tự định dạng đặc biệt của riêng chúng (thường bị ẩn) và/hoặc chuyển đổi các ký tự nhất định. Điều đó có thể thực sự phức tạp để phát hiện và có thể gây ra vấn đề cho bạn ... – user1775718

Các vấn đề liên quan