2016-09-09 3 views
1

Моя структура проекта выглядит следующим образомRequireJS иногда не удается загрузить JQuery

root/ 
    lib/ 
    js/ 

В моей папке JS У меня есть файл конфигурации требуется, который ссылается на JavaScript-файлы в каталоге LIB. Как так:

require.config({ 
    paths: { 
     jquery: ["../lib/jquery/dist/jquery"], 
    } 
}); 

Начатые в виде так:

<script data-main="js/require-config" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script>require(["viewModels/searchViewModel"]);</script> 

И это, как мой searchViewModel выглядит (опущена код внутри функции), генерируемый из машинописи:

define(["require", "exports", "jquery"], function (require, exports, $) { 
    "use strict"; 
    var SearchViewModel = (function() { 
     function SearchViewModel() { 
     } 
     return SearchViewModel; 
    } 
}); 

Для в большинстве случаев, кажется, нет проблем с поиском правильного файла. Иногда, однако, он ищет файл jquery в файле /js/jquery.js, который заставит браузер сбросить 404 для http://localhost/js/jquery.js.

Я делаю что-то не так в конфигурации require? И как это работает, иногда, а иногда нет?

ответ

0

Не используйте data-main для загрузки конфигурации RequireJS. Причина, по которой она работает с перерывами, состоит в том, что data-main вызывает требование RequireJS для загрузки сценария с именем асинхронно. Таким образом, к моменту выполнения require(["viewModels/searchViewModel"]); ваша конфигурация необязательно была загружена.

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

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

Разделите script так:

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script src="js/require-config.js"></script> 
Смежные вопросы