Загрузите modernizr в голову, но используйте его в require.js

Я хочу синхронно загрузить модерниз в голову, чтобы предотвратить fouc. Я использую require.js перед /body для загрузки некоторых других скриптов, в которых я хотел бы использовать modernizr для обнаружения функций и тому подобного.

Каков правильный способ сделать это или даже рекомендуется это сделать? Если я требую в своих сценариях modernizr, он загружается снова, если я этого не делаю, он не определен.

Заранее спасибо. :)


person shapeshifta    schedule 29.04.2013    source источник


Ответы (1)


Если Modernizr — это первый скрипт, загружаемый в голову, то он доступен отовсюду, поэтому вы можете определить простую оболочку следующим образом:

define('modernizr', function () { return window.Modernizr });

Этот код можно поместить внутрь wrappers.js следующим образом:

<head>
<script src="/js/vendor/modernizr.js"></script>   
<script src="/js/vendor/require.js"></script>  
<script src="/js/wrappers.js"></script>  
<script src="/js/main.js"></script>
</head>

Затем в main.js

var scripts = document.getElementsByTagName('script')
  , src = scripts[scripts.length - 1].src
  , baseUrl = src.substring(src.indexOf(document.location.pathname), src.lastIndexOf('/'))

require.config({
  baseUrl: baseUrl
})
person Andrey Kuzmin    schedule 01.05.2013
comment
Не могли бы вы определить это сразу после объявления требуемой конфигурации? Или у вас будет что-то вроде файла wrappers.js и множество этих маленьких определений? Я мог бы видеть здесь применение каждый раз, когда вы хотите что-то вернуть из объекта окна. Специально для тестирования вы сможете очень легко издеваться над глобальным объектом - person Neil; 10.07.2013
comment
Что касается оп-вопроса, я бы поместил его сразу после требуемой конфигурации в main.js, указанного в атрибуте «data-main», который автоматически загружается requirejs. Но если вам нужно поместить его в отдельный файл, то эти скрипты должны быть загружены в правильном порядке, а main.js должен определять baseUrl. - person Andrey Kuzmin; 10.07.2013