Ошибка Gulp-Babel при разборе JSX

Я новичок в использовании gulp и babel вместе. Я создал задачу сборки (упрощенная версия ниже):

var gulp = require('gulp');
var babel = require('gulp-babel');

gulp.task('build', () => {
  return gulp.src('src/components/App.jsx')
    .pipe(babel())
    .pipe(gulp.dest('build'))
});

Мой файл src/components/App.jsx выглядит так:

/** @jsx React.DOM */

import React, {Component} from 'react';

class App extends Component {
  render() {
    return <div>Example</div>
  }
}

export default App;

Ошибка, которую я получаю:

events.js:141
      throw er; // Unhandled 'error' event
      ^
SyntaxError: /Users/user/src/components/app.jsx: Unexpected token (8:6)
   6 |   render: () => {
   7 |     return (
>  8 |       <div>Test</div>
     |       ^
   9 |     )
  10 |   }
  11 | });
    at Parser.pp.raise (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/location.js:24:13)
    at Parser.pp.unexpected (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/util.js:91:8)
    at Parser.pp.parseExprAtom (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:514:12)
    at Parser.pp.parseExprSubscripts (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:267:19)
    at Parser.pp.parseMaybeUnary (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:247:19)
    at Parser.pp.parseExprOps (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:178:19)
    at Parser.pp.parseMaybeConditional (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:160:19)
    at Parser.pp.parseMaybeAssign (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:123:19)
    at Parser.pp.parseParenAndDistinguishExpression (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:566:26)
    at Parser.pp.parseExprAtom (/Users/user/node_modules/gulp-babel/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:471:19)

Должно быть, я делаю что-то не так, но я не уверен, что именно. Любые идеи?


person Daniel Timberlake    schedule 07.11.2015    source источник


Ответы (1)


Babel, начиная с версии 6, по умолчанию ничего не делает, и вы должны предоставить набор преобразователей, которые будут применяться к исходному коду.

В вашем случае вам нужны пресеты трансформатора react и es2015:

.pipe(babel({
    presets: ['react', 'es2015']
}))

Дальнейшие подробности:

person zerkms    schedule 07.11.2015
comment
Не могли бы вы также добавить файл package.json для этого преобразования. - person Jitendra Pancholi; 12.09.2019
comment
@JitendraPancholi это было 4 года назад о_О - person zerkms; 12.09.2019
comment
Да... Я пытаюсь преобразовать jsx в js через gulp, но сталкиваюсь с проблемами. Я следил за stackoverflow.com/a/36991417/1425210, но из-за последних версий выдает ошибку. - person Jitendra Pancholi; 12.09.2019