2016-09-12 50 views
0

我試圖transpile的代碼是這樣的:咕嘟咕嘟+ browserify + babelify: 「意外令牌」 的JSX代碼

var React = require('react'); 
var ReactDOM = require('react-dom'); 

var listOfItems = <ul> 
        <li className="item-1">Item 1</li> 
        <li className="item-2">Item 2</li> 
        <li className="item-3">Item 3</li> 
        </ul>; 

ReactDOM.render(listOfItems, document.getElementById('react-application')); 

的gulpfile.js看起來是這樣的:

var gulp = require('gulp'); 
var browserify = require('browserify'); 
var babelify = require('babelify'); 
var source = require('vinyl-source-stream'); 

gulp.task('default', function() { 
    return browserify('./source/app.js') 
    .transform(babelify) 
    .bundle() 
    .pipe(source('snapterest.js')) 
    .pipe(gulp.dest('./build/')); 
}); 

但是,如果我嘗試啓動gulp,它給了我這個錯誤:

[18:00:34] Using gulpfile ~/Documents/Esercitazioni/react/reactjs-essentials/snapterest/gulpfile.js 
[18:00:34] Starting 'default'... 
events.js:141 
     throw er; // Unhandled 'error' event 
    ^

SyntaxError: /Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/source/app.js: Unexpected token (4:18) 
    2 | var ReactDOM = require('react-dom'); 
    3 | 
> 4 | var listOfItems = <ul> 
    |     ^
    5 |      <li className="item-1">Item 1</li> 
    6 |      <li className="item-2">Item 2</li> 
    7 |      <li className="item-3">Item 3</li> 
    at Parser.pp.raise (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/location.js:22:13) 
    at Parser.pp.unexpected (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/util.js:91:8) 
    at Parser.pp.parseExprAtom (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:512:12) 
    at Parser.pp.parseExprSubscripts (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:270:19) 
    at Parser.pp.parseMaybeUnary (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:250:19) 
    at Parser.pp.parseExprOps (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:180:19) 
    at Parser.pp.parseMaybeConditional (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:157:19) 
    at Parser.pp.parseMaybeAssign (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/expression.js:120:19) 
    at Parser.pp.parseVar (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/statement.js:585:24) 
    at Parser.pp.parseVarStatement (/Users/macbookpro/Documents/Esercitazioni/react/reactjs-essentials/snapterest/node_modules/babelify/node_modules/babel-core/node_modules/babylon/lib/parser/statement.js:416:8) 

回答

0

包裝是否在括號中<li> HEL P +

var React = require('react'); 
var ReactDOM = require('react-dom'); 

var listOfItems = (
       <ul> 
       <li className="item-1">Item 1</li> 
       <li className="item-2">Item 2</li> 
       <li className="item-3">Item 3</li> 
       </ul> 
    ); 

ReactDOM.render(listOfItems, document.getElementById('react-application')); 
+0

不! :[給我同樣的錯誤! –

+0

如果我在不使用JSX的情況下使用JavaScript代碼編寫相同的代碼,gulp不會給我任何錯誤。只有使用JSX吞嚥給我錯誤。 –

+0

啊,我想象你的babelify沒有正確配置以支持反應語法。我不是babelify的專家,所以我不知道如何最好地解決這個問題,對不起 –

5

babelify docs

As of Babel 6.0.0 there are no plugins included by default. For babelify to be useful, you must also include some presets and/or plugins .

在你的情況,這意味着你需要babel-preset-es2015babel-preset-react

$ npm install --save-dev babel-preset-es2015 babel-preset-react 

然後,你需要告訴babelify使用它們:

gulp.task('default', function() { 
    return browserify('./source/app.js') 
    .transform(babelify.configure({presets: ['es2015','react']})) 
    .bundle() 
    .pipe(source('snapterest.js')) 
    .pipe(gulp.dest('./build/')); 
}); 
+0

非常感謝,它爲我工作。 – user3181365