AMD
このサイトは作成途中のものを公開しています。 また、Webpackのバージョンが1.13.0の頃に作成されたものですが、2017年2月現在Webpackは1系を非推奨として2の使用を勧めています。
AMD(Asynchronous Module Definition / 非同期モジュール定義)は、CommonJSのモジュールシステムの性質が「同期」であったため、 ブラウザには相応しくないと考えた人達に向けられたものでした。
AMDは同期読み込みに関する問題を解決し、 非同期での依存関係の読み込みを可能にするためのJavaScriptのモジュール化の標準を指定するものです。
仕様
モジュールはdefine
関数を使用して定義されます。
define
define
関数で、AMDのモジュールをどのように定義するかを決めます。
これは、下記のシグネチャを持つ関数に過ぎません。
define(id?: String, dependencies?: String[], factory: Function|Object);
例
幾つかの例を見てみましょう。
名前が付けられたモジュール
myModule
という名前が付けられたjQueryを必要とする(依存する)モジュールの定義例です。
define('myModule', ['jquery'], function($) {
// $はjqueryモジュールからexportされたものです。
$('body').text('hello world');
});
//次のように使用します。
require(['myModule'], function(myModule) {});
注意: webpackでは、名前が付けられたモジュールはローカルでのみ利用可能です。 一方Require.jsでは、名前が付けられたモジュールはグローバルで利用可能です。
匿名(名無し)のモジュール
id
の引数を指定しないモジュールの定義例です。
define(['jquery'], function($) {
$('body').text('hello world');
});
複数の依存性を持つモジュール
複数の依存性を持つモジュールの定義例です。 各依存性のexportが、factory関数に渡されることに注目して下さい。
define(['jquery', './math.js'], function($, math) {
$('body').text('hello world');
});
値のexport
自身をexportするモジュールの定義例です。
define(['jquery'], function($) {
var HelloWorldize = function(selector){
$(selector).text('hello world');
};
return HelloWorldize;
});
requireを使用した依存性の読み込み
依存性を示すdependencies
引数を省略した場合、
前述したように、デフォルト値として["require", "exports", "module"]
が指定されることを思い出してください。
define(function(require) {
var $ = require('jquery');
$('body').text('hello world');
});
© 2010 - 2017 STUDIO KINGDOM