Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RequireJS:使用Modernizer有条件地加载Polyfill_Requirejs_Modernizr_Polyfills - Fatal编程技术网

RequireJS:使用Modernizer有条件地加载Polyfill

RequireJS:使用Modernizer有条件地加载Polyfill,requirejs,modernizr,polyfills,Requirejs,Modernizr,Polyfills,如何将polyfill脚本包装为AMD模块,并使用Modernizer和RequireJS有条件地加载它 当我为其他试图做同样事情的人起草我的问题张贴答案时,我发现了这一点。我需要加载的polyfill用于不支持输入占位符的浏览器。它不提供现成的AMD支持 首先,我将其包装为AMD模块,如下所示: define(['jquery'], function ($) { (function(window, document, $) { ... polyfill ... }(this,

如何将polyfill脚本包装为AMD模块,并使用Modernizer和RequireJS有条件地加载它


当我为其他试图做同样事情的人起草我的问题张贴答案时,我发现了这一点。

我需要加载的polyfill用于不支持输入占位符的浏览器。它不提供现成的AMD支持

首先,我将其包装为AMD模块,如下所示:

define(['jquery'], function ($) {
  (function(window, document, $) {
    ... polyfill ...
  }(this, document, jQuery));
});
然后在main.js中,我使用Modernizer有条件地要求polyfill脚本:

require(['jquery', 'modernizr'], function ($, Modernizr) {
  if (!Modernizr.input.placeholder) {
    require(['jquery', 'placeholder'], function ($) {
      $('#input').placeholder();
    });
  }
});

在您的示例中,需要jQuery两次。如果jQuery占位符是需要jQuery的唯一原因,那么在第一步中,我只需要Modernizer而不需要jQuery。另外,在模块包装器中使用而不是复制供应商源代码被认为是更好的做法,因为您可以保持供应商代码不变,并随时替换它。