orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

RequireJSを始めて戸惑ったこと

公式のGetting Started単純すぎでは?

自作のhelper/util.jsをAMD使って書いてるような意識高い人は、今さらGetting Startedを読まないと思うのです。。

Examplesからリンクされている以下のサンプルを眺めるのがオススメです。

 requireとrequirejsとrequire.configとrequirejs.configのどれ使えばいいの?

ドキュメントでは混在してて戸惑いますが、requirerequirejs は基本的に同じものなので、気にしなくて良いです。主観では 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.jsmy/module.js のようなパスで管理することもできますが、 jquerymy/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版のみでした。

まとめ

始めるときに参考にさせていただいたサイト