babelify7.0.2 で jsx の compile に失敗する件
現象
- babelify 7.0.2
- browserify 12.0.1
- react 0.14.1
var React = require('react'); var Container = React.createClass({ render: function() { <div>test</div> } }); React.render( <Container />, document.getElementById('container') );
% browserify -t babelify src/app.jsx -o build/bundle.js SyntaxError: /Users/horowitz/dev/poochie/src/app.jsx: Unexpected token (9:2) 7 | 8 | React.render( > 9 | <Container />, | ^ 10 | document.getElementById('container') 11 | ); 12 |
SyntaxError
になってしまう。
方法
2つほど。
1. babelify
の version 6.4.0
に戻す
戻すと上手く動いた。
世の中に出回ってる記事のサンプルも動く。
2. presets を指定する
要は追加のオプションを付ける必要があるとのこと。
コマンドラインから実行する場合は、以下のような感じ
npm install --save-dev babel-preset-react echo '{"presets":["react"]}' > .babelrc browserify -t babelify src/app.jsx -o build/bundle.js
gulp の場合は configure
から presets
を渡す
debug: true }) - .transform(babelify) + .transform(babelify.configure({ + presets: ["react"] + })) .bundle() .pipe(source('bundle.js')) .pipe(gulp.dest('build'));
関係ないけど es6
でコードを書いた場合は、babel-preset-es2015
の install と presets: ["es2015"]
の指定が必要になるみたい。
まとめ
js 初学者にはキツイお仕置きでした。
babelify7
から babel6
を内部で使っていて、babel6
から新しく option 付ける必要があるらしい、という雑な理解をしています。