I think all JavaScript module writers should start using UMD when defining their modules. Yes, it’s a bit messy and seemingly unnecessary boilerplate. But if you really cared about your users, then you’ll do it. :)
Even if you don’t like using an AMD like RequireJS, you will do your users a big favour by using one of the UMD variants.
For example, a jQuery plugin can be defined as follows:
// Uses AMD or browser globals to create a jQuery plugin.
// It does not try to register in a CommonJS environment since
// jQuery is not likely to run in those environments.
// See jqueryPluginCommonJs.js for that version.
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
$.fn.jqueryPlugin = function () {};
}));
This is taken straight from the umdjs repo.