RequireJS: условная загрузка полифилла с помощью Modernizr

Как обернуть сценарий полифилла как модуль AMD и условно загрузить его с помощью Modernizr и RequireJS?

(Понял это, пока я составлял свой вопрос - публиковал ответ для всех, кто пытался сделать то же самое.)


person cantera    schedule 17.01.2014    source источник


Ответы (1)


Мне нужно было загрузить полифил jquery-placeholder для браузеров, которые не поддерживают заполнители ввода. Он не обеспечивает поддержку AMD из коробки.

Сначала я обернул его как модуль AMD следующим образом:

define(['jquery'], function ($) {
  (function(window, document, $) {
    ... polyfill ...
  }(this, document, jQuery));
});

Затем в main.js я использовал Modernizr для условного require() сценария полифилла:

require(['jquery', 'modernizr'], function ($, Modernizr) {
  if (!Modernizr.input.placeholder) {
    require(['jquery', 'placeholder'], function ($) {
      $('#input').placeholder();
    });
  }
});
person cantera    schedule 17.01.2014
comment
в вашем примере вам требуется jQuery дважды. Если заполнитель jQuery является единственной причиной, по которой необходим jQuery, то на первом этапе я бы потребовал только Modernizr, а не jQuery. Также используется прокладка RequireJS вместо копирования исходного кода поставщика внутри оболочки модуля. считается лучшей практикой, поскольку вы оставляете код поставщика как есть и можете заменить его в любой момент. - person Jasper Moelker; 25.05.2014