趣旨
フロントreactのサーバrailsのアプリ作成中に軽い気持ちでbrowserifyを導入しようとしたらハマった話。
※根本的に間違ってる可能性は大いにあるのだが、同じ構成でやる時の注意点として残します
使ったライブラリとか
gem
- rails(4.2.4)
- react-rails(1.4.2)
- browserify-rails(0.9.3)
jsライブラリ
- browserify(10.2.6)
- browserify-incremental(3.0.1)
- reactify(1.1.1)
- coffeeify(1.2.0)
やろうとしたこと
reactとcoffeescriptでアプリを実装しようとした。
(ファイルは.js.jsx.coffee
な拡張子)
最初はsprocketsにコンパイル任せてたらうまくいってた。
しかし、、、
ファイル分割したりして、
「requireつかいて〜な〜」って思い立ってbrowserifyを入れたのが運の尽き。
components/commentBox.js.jsx.coffee
Commet = require('./comment').Comment
class CommentBox extends React.component
render: ->
`<Comment />`
components/comment.js.jsx.coffee
class Comment extends React.component
render: ->
`<div>コメントだよ</div>`
module.extends = Comment
みたいなことをやろうとして、下記エラーが立ちはだかる。。。
xxx/components/comment.js.jsx.coffee:13
return <div>
^
ParseError: Unexpected token
なエラーが治らず、盛大にはまりました。ビクトモシネー
解決策
initializer/asset.rb
Rails.application.config.browserify_rails.commandline_options = [
"-t [coffeeify --extension .coffee]",
"-t [reactify --extension .jsx.coffee]",
"--extension .js.jsx.coffee"
]
な感じにしたら行けました。少なくとも上のような簡単なコードは通った。
参考にしたもの
Can't render browserified JS on server side
Railsでbrowserifyとreact