オープン ソース配布用の最初の AngularJS モジュールを作成しています。他の人が食べやすいように包装したいと思います。
UMD プロジェクトは、AMD、CommonJS (または少なくとも Node)、およびブラウザー グローバルと互換性のある JavaScript モジュールをエクスポートするためのパターンを提供します。
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['b'], factory); // AMD
} else if (typeof exports === 'object') {
module.exports = factory(require('b')); // Node
} else {
root.returnExports = factory(root.b); // browser global (root is window)
}
}(this, function (b) {
// use b in some fashion
return {}; // return a value to define the module export
}));
ただし、AngularJS には独自の内部モジュール システムがあるため、モジュールの登録は、angular
オブジェクトのメソッドを呼び出すだけで行われますangular.module()
。したがって、UMD モジュールは何もエクスポートする必要はありません。を要求し、それに基づいて行動する必要があるだけですangular
。前の例に関しては、次のようになると思います。
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
factory(require(['b'])); // AMD
} else if (typeof exports === 'object') {
factory(require('b')); // Node
} else {
factory(root.b); // browser global (root is window)
}
}(this, function (b) {
// use b in some fashion
}));
または、私の場合に固有:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
factory(require(['angular'])); // AMD
} else if (typeof exports === 'object') {
factory(require('angular')); // Node
} else {
factory(root.angular); // browser global (root is window)
}
}(this, function (angular) {
angular.module( ... );
}));
これは大したことではありませんか、それとも UMD の精神に反しますか? 何もエクスポートしない UMD パターンが見つからなかったので質問します。