2014-02-19 3 views
2

Это конфигурационный файл в папке /themes/ifd/js/:Requirejs смотрит в неверном пути

require.config({ 
    // Initialize the application with the main application file 
    deps: ['plugins/console', 'main'], 
    baseUrl: '/themes/ifd/js/components' 
    paths: { 
     jquery: 'jquery/jquery.min', 
     flexslider: 'flexslider/jquery.flexslider-min', 
     easydropdown: 'easydropdown/jquery.easydropdown.min', 
     bpopup: 'bpopup/jquery.bpopup.min', 
     jqrangeslider: 'jqrangeslider/jQRangeSlider', 
     jqueryui: 'jquery-ui/js/jquery-ui-1.10.4.custom.min' 
     // More additional paths here 
    }, 
    shim: { 
     jqueryui: 'jquery' 
    }, 
    // Prevent caching issues, by adding an additional URL argument 
    urlArgs: 'bust=' + (new Date()).getDate() 
}); 

У меня main.js файл в папке /themes/ifd/js тоже:

require([ 
    // Require the modules 
    'modules/module', 
    'jquery', 
    'flexslider', 
    'easydropdown', 
    'bpopup', 
    'jqueryui', 
    'jqrangeslider' 
], function (module) { 
    'use strict'; 
    // Rest of a file 

И остальные файлов (?) модули внутри /themes/ifd/js/components:

Screenshot of list of files

В моем HTML у меня есть:

<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script> 

выводятся сообщения, которые я вижу в консоли Chrome:

GET http://DOMAIN/themes/ifd/js/jquery.js 404 (Not Found) requirejs.js:34 
GET http://DOMAIN/themes/ifd/js/flexslider.js 404 (Not Found) 

Я не могу найти то, что это не так, и почему он не ищет в каталоге компонентов .. .

ответ

3

Точка входа для requirejs является основным модулем, указанным в html-файле. Первый

<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script> 

requirejs нагрузок "/themes/ifd/js/main.js. Теперь в файле main.js require ([...]) попробуйте загрузить в модуль, указанный в args, но requirejs не смогут их найти.

Причина в том, что requirejs не знает о них, поскольку require.config (...) не выполняется.

Нужно иметь 'require.config (...)' в, чтобы сделать все настройки '' /themes/ifd/js/main.js

Вот working example. Он включает в себя Requirejs, jQueryMobile, Backbone и Marinonette.

В файле index.html необходимо указать основной модуль для загрузки requirejs.

<script type="text/javascript" data-main="js/main" src="js/libs/require-2.1.2.min.js"></script> 

В этом примере основной модуль находится под "js/main.js"

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

+0

Спасибо, оба ваши решения хороши. Теперь у меня есть другие проблемы, но эта перкулярная проблема считается решенной :) – matiit

1

Сетевая активность, которую вы показываете нам, указывает, что ваша конфигурация полностью игнорируется RequireJS. И вы говорите: «Тогда у меня есть, что в моем HTML»:

<script data-main="/themes/ifd/js/main" src="/themes/ifd/js/requirejs.js"></script> 

Вы показали содержание /themes/ifd/js/main.js но не включает в себя конфигурацию, которая, по-видимому находится в другом файле.

Решение будет состоять в том, чтобы перевести ваш вызов на require.config в ваш файл main.js, прежде чем вы позвоните по телефону require.

0

Похоже, вы просто загружаете main.js и никогда не говорите RequireJS, чтобы использовать вашу конфигурацию.

Это RequireJS issue списков несколько способов загрузки как конфига и главного -

  1. положить конфиг на HTML, прежде чем требуется модуль верхнего уровня.
  2. загрузите config.js другим тегом.
  3. выполните вложенный файл require() в файл HTML (требуется конфигурация, отличная от основной).
  4. Сделайте вложенный запрос require() внутри main.js.
  5. сохранить конфигурацию внутри main.js

Наилучший подход будет варьироваться в зависимости от структуры проекта, я делал 5 способ чаще, чем другие, так как я обычно имеют единственную точку входа для всех страниц, но в некоторых случаях я использовал 1 и 2.

Далее на странице показаны некоторые примеры этих подходов.

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