RequireJS and moment.js
by fiddlegrimbo
HTML
<script src="http://requirejs.org/docs/release/2.1.5/comments/require.js"></script>
JavaScript
requirejs.config({
baseUrl: 'https://raw.github.com/timrwood/moment/2.0.0/',
/*
baseUrl: 'https://raw.github.com/timrwood/moment/2.0.0/min/',
paths:{
'moment': 'moment.min'
}
*/
});
var fnWrapper = function (fn, before, after) {
var ctx = this;
var opToString = Object.prototype.toString;
var apSlice = Array.prototype.slice;
return function () {
var args = arguments,
tempArgs;
if ("function" === typeof before) {
args = (tempArgs = before.apply(ctx, arguments)) ? tempArgs : args;
}
var res = fn.apply(ctx, args);
if ("function" === typeof after) {
if ("[object Array]" !== opToString.call(args)) {
args = apSlice.call(args, 0);
}
res = after.apply(ctx, args.concat([res]));
}
return res;
};
};
var logWrapper = function (fn) {
return fnWrapper(fn, function () {
console.log(arguments);
});
};
require = fnWrapper(require, function () {
var args;
for (var i = 0; i < arguments.length; i++) {
if ("../moment" === arguments[i]) {
if (!args) {
args = Array.prototype.slice.call(arguments, 0);
}
args[i] = "moment";
}
}
if (args) {
console.log(args);
}
return args;
});
require = logWrapper(require);
define = logWrapper(define);
define('mymodule', ['require', 'moment'], function (require, moment) {
console.log(moment);
require(['lang/de'], function (de) {
console.log(moment, de);
moment.lang('de');
});
return {};
});
require(['mymodule'], function (mymodule) {
console.log(mymodule);
});