はじめに§ 1

CommonJSモジュール形式を定義しています。残念ながら、ブラウザを他のJavaScript環境と同等に扱うことなく定義されました。そのため、トランスポート形式非同期requireに関するCommonJS仕様の提案があります。

RequireJSは、依存関係を参照するために文字列名を使用し、モジュールがグローバルオブジェクトを定義することを避けるというCommonJSの精神を維持しようとしますが、それでもブラウザでネイティブにうまく機能するモジュール形式のコーディングを可能にします。RequireJSは、非同期モジュール定義(以前のTransport/C)の提案を実装しています。

従来のCommonJSモジュール形式のモジュールがある場合、RequireJSで動作するように簡単に変換できます。すべてのモジュールが新しい形式にきれいに変換されるわけではありません。うまく変換されない可能性のあるモジュールの種類:

  • 条件付きコードを使用してrequire呼び出しを行うモジュール。例:if(someCondition) require('a1') else require('a2');
  • いくつかの種類の循環依存関係。

手動変換§ 2

変換するモジュールが数個しかない場合は、モジュールを次のコードでラップするだけです。

define(function(require, exports, module) {
    //Put traditional CommonJS module content here
});

重要:関数引数は常に **require, exports, module** として、正確にこれらの名前で、この正確な順序でリストする必要があります。そうでない場合、混乱が生じます。リストからexportsとmoduleを省略できますが、必要な場合は、ここに示されている正確な順序で指定する必要があります。

変換ツール§ 3

変換するモジュールが多い場合は、r.jsプロジェクトにr.jsファイルに組み込まれたコンバーターツールがあります。変換するディレクトリへのパスと出力ディレクトリを指定します。

node r.js -convert path/to/commonjs/modules/ path/to/output

少数のCommonJSモジュールは、define() でラップされたモジュールとしてはうまく機能しません。詳細はr.jsのREADMEを参照してください。

エクスポート値の設定§ 4

エクスポートされた値をmodule.exportsとして割り当てることでエクスポートされた値を設定できるCommonJSシステム(主にNode)があります。そのイディオムはRequireJSでサポートされていますが、別のより簡単な方法があります。**define**に渡された関数から値を返すだけです。

define(function (require) {
    var foo = require('foo');

    //Define this module as exporting a function
    return function () {
        foo.doSomething();
    };
});

この方法では、通常、exportsおよびmodule関数引数は必要ないため、モジュール定義から省略できます。

代替構文§ 5

define() に渡された関数内でrequire() を使用して依存関係を取得する代わりに、define() に依存関係配列引数として指定することもできます。依存関係配列内の名前の順序は、define() に渡された定義関数に渡された引数の順序と一致します。そのため、モジュール **foo** を使用する上記の例は

define(['foo'], function (foo) {
    return function () {
        foo.doSomething();
    };
});

その構文の詳細については、APIドキュメントを参照してください。

CommonJSパッケージからのモジュールの読み込み§ 6

CommonJSパッケージ内のモジュールは、場所とパッケージ属性を知るようにRequireJS構成を設定することで、RequireJSによってロードできます。詳細はパッケージAPIセクションを参照してください。

最適化ツール§ 7

RequireJSには、モジュール定義をブラウザ配信用に最適化されたバンドルに結合できる最適化ツールがあります。これは、コードデプロイメントの一部として使用するコマンドラインツールとして機能します。詳細は最適化ドキュメントを参照してください。