【问题标题】:Browserify, Babel 6, Gulp - Unexpected token on spread operatorBrowserify,Babel 6,Gulp - 传播运算符上的意外令牌
【发布时间】:2016-02-18 03:01:50
【问题描述】:

我正在尝试让我的 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 文件,但它做同样的事情。当我删除传播运算符时,我的脚本就可以工作了。

这是出现 Unexpected token 的文件(很简单)。

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 网站上的设置页面上阅读了一些问题,但我无法使其正常工作。

谁能告诉我如何正确处理这个问题?谢谢

【问题讨论】:

    标签: javascript gulp ecmascript-6 browserify babeljs


    【解决方案1】:

    该语法是未来的实验性提议语法,它不是es2015 或react 的一部分,因此您需要启用它。

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

    并添加

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

    在您现有的presets 旁边进入.babelrc。

    或者:

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

    并在您的预设中使用 stage-3 以启用所有第 3 阶段的实验功能。

    【讨论】:

    • @MikeBoutin loganfsmyth 您能否指定在哪里将其指定为预设?我有同样的问题,虽然我通过 cli 使用 babelify。谢谢
    • 通过 CLI,您需要一个 .babelrc 文件,并且预设位于 babeljs 站点的插件页面中
    • 目前是第 3 阶段! :D
    • npm install --save-dev babel-preset-stage-3 和 presets: ["stage-3"] 为我做了。
    【解决方案2】:

    我遇到了同样的问题,安装了 stage-2 插件并修改了我的 package.json 文件,如下所示

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

    【讨论】:

      【解决方案3】:

      顺便说一句,一些文本编辑器(在我的例子中是 Mac Notes)会将... 收缩成一个省略号实体,这将无法通过验证,所以也要注意这一点......

      【讨论】:

      • 那不是我的文本编辑器。这只是我偶尔转储代码块的地方。 :D
      • 值得指出的是,各种产品,包括微软产品和slack之类的东西,经常插入自己的特殊格式字符(通常是隐藏的)和/或转换某些字符以显示。这可能真的很难发现并且可能会给您带来问题......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2023-03-27
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多