2012-06-05 5 views
14

Использование requirejs моих main.js выглядит следующим образомпонимание requirejs пути

requirejs.config({ 
    baseUrl: '/javascript/', 
    paths: { 
     jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min', 
     async: 'requirePlugins/async', 
      hbs: 'hbs' 
    }, 
    waitSeconds: 7 
}); 
define(['common'], function() { 
    loadFonts(); 
}); 

В main.js включен в страницу с помощью вызова сценария

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script> 

Common является основной функцией для веб-сайта , JQuery документ готова функция и т.д., завернутые в определении вызова:

define(['jquery'], function() { 
    //jQuery dependant common code 
}); 

Это прекрасно работает, Jquery загружается из г oogle CDN и код выполнен. Но когда я добавить требует вызова после загрузки main.js

<script data-main="/javascript/main.js" src="/javascript/require-2.0.1.js"></script> 
require(['jquery'], function ($) { 
    //code 
}); 

JQuery запрашивается /javascript/jquery.js вместо заданного пути к Google КДС. Я все еще новичок в requirejs, но мне кажется, что путь должен быть определен до того, как любой из других запросов будет уволен, может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно?

ответ

-2

Я думаю, что вы можете встроить полный URL-адрес в требуемый блок. :

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min'], function ($) { 
    //code 
}); 

btw, ваша ссылка на jquery недействительна.

+0

я мог, но JQuery определяет себя как драм модуль, так что я должен быть в состоянии использовать «JQuery» вместо того, чтобы писать весь URL каждый раз. Почему ссылка jquery недействительна? –

+0

привет, я попытался посетить 'http: // ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min' и нашел 404. – HungryCoder

+0

Прошу прощения, я забыл, что requirejs добавляет .js к сценарий, предполагающий, что все модули являются скриптами. ваша ссылка верна. извините за смущение. – HungryCoder

5

Возможно, вы положили инструкцию config перед загрузкой js.

Сначала необходимо загрузить require.js, после этого введите код конфигурации, затем вызовите require (['jquery'], ...);

Причина, по которой он ищет/javascript /, потому что ваш файл require.js находится там, и он является базовым url по умолчанию.

Ваша конфигурация никогда не может использоваться require.js.

См. this tutorial о требованиях к конфигурации.

6

Я думаю, это может быть связано с использованием атрибута data-main в теге RequireJS script; для того, чтобы быть разобранным, RequireJS сам должен загружать и анализировать. В моем тестировании (в частности, для IE9) браузер будет загружать и выполнять теги скриптов, непосредственно следуя тегу RequireJS-скрипта, до разбора файла конфигурации RequireJS (указанного в атрибуте data-main).

Чтобы обойти это, я просто ушел с использованием атрибута data-main и вместо этого разместил конфигурационный файл как обычный тег скрипта непосредственно после тега ScriptJS RequireJS, и теперь все кажется счастливым.

В частности, это то, что он выглядит (используя образец):

<script src="/javascript/require-2.0.1.js"></script> 
<script src="/javascript/main.js"></script> 
+2

После того, как я потратил больше часа на это, я тоже отказался от 'data-main'. Использование двух сценариев сценария устранило мои определения ошибок загрузки. TYVM! – Yuck

0

Вы должны переименовать определить требовать

require(['common'], function() { 
    loadFonts(); 
}); 
0

Я бы рекомендовал использовать map вместо paths настроить специфические расположения модулей.

paths предназначен скорее для ярлыков/префиксов для упрощения/настройки, а не для полного пути к модулю.

Имейте в виду: вам нужно будет размещать сопоставления, которые вы хотите применить глобально под звездочкой (*) ключом в объекте map.

0

Причина в том, что вы положили require(['jquery']... сразу после загрузки модуля require.js. В результате он пытается загрузить ['jquery'] перед чтением настроек конфигурации.

И почему он пытается найти jquery в /javascript/jquery.js? это связано с вашим атрибутом data-main.

RequireJS загружает весь код относительно baseUrl. BaseUrl обычно устанавливается в тот же каталог, что и скрипт, используемый в атрибуте data-main для загрузки сценария верхнего уровня для страницы.

Эта ссылка проясняет require.js процедура загрузки модулей: http://requirejs.org/docs/api.html#jsfiles

Смежные вопросы