ほとんどどこでも使用できるライブラリ(MomentJS)のプラグインを作成しようとしています。RequireJSでの使用を計画しているので、AMDに対応している必要がありますが、ブラウザーまたはNodeでスクリプトタグを介してロードするユーザーも使用できるようにしたいと思います。
突っついた後、私はこれを一緒に叩きました:
(function() {
var hasModule = typeof module !== "undefined" && module.exports;
var MY_LIB_DEF = function (moment, global) {
if(typeof moment == "undefined") {
throw "Can't find moment";
}
var MY_LIB = {
//
//DEFINE PLUGIN
//
};
if(hasModule) {
module.exports = LIB
} else if(global) {
global.LIB = LIB;
} else {
return LIB;
}
};
if(hasModule) {
moment = require('moment');
}
if (typeof define === "function" && define.amd) {
define(["moment"], MY_LIB_DEF);
} else {
MY_LIB_DEF(moment, this);
}
})();
MY_LIB_DEFの下部で、CJSにエクスポートするのか、ウィンドウにアタッチするのか、AMDに戻るのかを判断するのは、開始する方法の選択と同様に少し不格好なようです(CJSとスクリプトのロードは定義の実行を共有します)関数。ただし、渡された「グローバル」は使用されません)。
上記は機能しますが、この問題はすでに解決されているはずだと思います。従うべき例が見つからないようです。
このためのより良い実践を知っている人はいますか?