react-railsでは実行環境に合わせて、
react-rails/asset_variant.rb at master · reactjs/react-rails
@react_directory = GEM_ROOT.join(‘lib/assets/react-source/’).join(@react_build).to_s
react-rails/railtie.rb at master · reactjs/react-rails
app.config.assets.paths << asset_variant.react_directory
こんな感じでgemに含んでいるreact.jsを使っています。ということは、npmの管理下にありません。
そうなると困るのが、他のnodeモジュールを使いたい場合にどうするかで、だいぶググってあちこちでソースを読んで悩んだのですが、現時点ではreact-railsのやり方に寄せてモジュールのソースを取り込むことにしました。
それぞれこんな感じです。(コードは抜粋)
app/assets/javascripts/application.js
//= require modules
app/assets/javascripts/modules.js
//= require_tree ./modules
js/gulpfile.babel.js
let paths = {
module_sources: [
'./node_modules/react-redux/dist/react-redux.min.js',
'./node_modules/redux/dist/redux.min.js'
],
modules_dir: '../app/assets/javascripts/modules/'
};
gulp.task('copy_modules', () => {
gulp.src(paths.module_sources)
.pipe(gulp.dest(paths.modules_dir));
});
js/package.json
{
"devDependencies": {
"react-redux": "^3.1.0",
"redux": "^3.0.2"
}
}
※jsディレクトリについてはこちら。
react-railsを使ったアプリでコンポーネントのテストを走らせてみた。 » サイキョウライン
Rails.rootの下に「js」というディレクトリを掘ってjs部屋
nodeモジュールはnpmで一括管理するのが相応しいと思っているのですが、肝心のreactがreact-railsの中にいるので、これだけ例外になるのが気持ち悪く感じています。
実際にreact-railsを使ってアプリを書いている方はどの様な方法でこの問題を解決しているでしょうか。
そもそもreact-railsを使わずにbrowserify-railsを使って汎用的(かな?)な方法で管理するべきなんですかね。
ググった結果をかき集めてもみんなやり方違っていて全然収束していかないのおもしろいしつらい
— MIKAMI Yoshiyuki (@yoshuki) 2015, 10月 6