RequireJSを始めて戸惑ったこと
公式のGetting Started単純すぎでは?
自作のhelper/util.jsをAMD使って書いてるような意識高い人は、今さらGetting Startedを読まないと思うのです。。
Examplesからリンクされている以下のサンプルを眺めるのがオススメです。
requireとrequirejsとrequire.configとrequirejs.configのどれ使えばいいの?
ドキュメントでは混在してて戸惑いますが、require
と requirejs
は基本的に同じものなので、気にしなくて良いです。主観では requirejs
より require
を使っている人のほうが多いです。
require.config({})
は require({})
とも書けます。ただ、設定をする場合は require.config({})
、モジュールを読み込むときは require
と使い分けたほうがわかりやすいでしょう。
configの書き方いろいろありすぎでは?
気にしないで良いです。以下の書き方を使いましょう。
HTML
<script src="require.js" data-main="main.js">
main.js(エントリポイント)
require.config({ // モジュールIDからモジュールのファイルを探すときにベースとなるパス baseUrl: '', paths: { // モジュールIDでは探せないモジュールのパス }, shim: { // AMDに対応してないモジュールを読み込むための設定 } }); require(['jquery'], function($) { // $を使った処理 });
require.config
の引数はConfiguration Optionsに解説があります。
そういえばモジュールって何?
公開用オブジェクトを、グローバルスコープを汚さずに定義するためのスクリプトです。公開用のオブジェクトとは、jQueryの$
や、Underscore.jsの_
、Backbone.jsのBackbone
のようなオブジェクトです。
jQueryプラグインのように、既存のオブジェクトに変更を加えるだけで何も公開しないモジュールもあります。1ファイル1モジュールのみを定義できます。
モジュールは jquery.js
や my/module.js
のようなパスで管理することもできますが、 jquery
や my/module
のような モジュールID で管理する方が良いです。
baseUrlはどこにすべき?
最初はベースっぽいところを適当に選べばよいかと思います。モジュールをファイルパスから独立したモジュールIDで管理することを意識しておけば、後から変更してもそんなに困りません。
BackboneとUnderscoreってshim使う必要あるの?
もはや必要ありません。RequireJS公式を含む世の中のドキュメントには、Backbone.jsやUnderscore.jsがshimの使用例としてよく出てきますが、 2014年2月リリースの Backbone.js 1.1.1、Underscore.js 1.6.0以降はAMDに対応しています。
ちなみにjQuery UIも1.11(2014年6月リリース)からAMDに対応しています。
r.js難しくない?
はい。shimのライブラリが動かなくなったりするので頑張りましょう。 shimの解説 にいろいろ注意書きがあります。
最初は optimize: 'none'
で様子を見るのが良いです。
r.js遅くない?
Rhino版は遅いので、Node版を使いましょう。
ちなみに私は django-require というライブラリを使って、Herokuにpushしたときにr.jsが走るようにしましたが、あまりに遅かったのでr.jsを使うのやめました。Python環境にはNodeが入っておらず、Javaしか入ってないので、簡単に使えるのはRhino版のみでした。
まとめ
RequireJSは、混沌とした<script>タグの羅列に秩序をもたらす素晴らしいプロダクトなんだけど、r.jsで最適化しようとするとハマりどころが多くて辛い
— かと (@orangain) 2014, 7月 13