(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module unless amdModuleId is set
    define([], function () {
      return (root['Chartist'] = factory());
    });
  } else if (typeof exports === 'object') {
    // Node. Does not work with strict CommonJS, but
    // only CommonJS-like environments that support module.exports,
    // like Node.
    module.exports = factory();
  } else {
    root['Chartist'] = factory();
  }
}(this, function () {

Jest to fragment kodu pluginu Chartist
Trochę poczytałem na temat AMD, requireJS itd., ale chyba zbyt mało, żeby połączyć zgromadzoną wiedzę w całość i zrozumieć powyższy kod. Mógłby mi ktoś wytłumaczyć, co tam się dzieje? Czy pierwsze dwa ify są na wypadek gdyby ktoś korzystał z RequireJS/CommonJS, czy o co z tym chodzi? Jedyne do czego doszedłem, to root['Chartist'] = factory(); => ta funkcja zwraca obiekt Chartist.