2015-03-24 4 views
1

Я пытаюсь модифицировать requirejs в проект, и я периодически получаю «404 Not Found» в файлах.RequireJS не загружает правильный путь

Каждый, примерно, 3 или 4 перезагружается я получаю следующие ошибки

GET http://localhost:8080/build/jquery.js 
Uncaught Error: Script error for: jquery 

GET http://localhost:8080/build/touchSwipe.js 
Uncaught Error: Script error for: touchSwipe 

Мои файлы выглядит следующим образом:

config.js

require.config({ 
    paths: { 
     'jquery': 'vendor/jquery', 
     'touchSwipe': 'vendor/jquery.touchSwipe.min', 
     'scripts': 'scripts/' 
    }, 
    shim: { 
     'touchSwipe': { 
      deps: ['jquery'] 
     } 
    } 
}); 
require(['main']); 

main.js

require(
    ['scripts/menu', 
    .. more js files .. ]); 

Я использую gr ЕНТ-CONTRIB-requirejs оптимизировать файлы и все, кажется, работает нормально

Gruntfile.js

requirejs: { 
    compile: { 
     options: { 
      baseUrl: "path/to/file/", 
      mainConfigFile: "path/to/file/config.js", 
      dir: 'path/to/build/', 
      modules: [ 
       { 
        name: 'main' 
       }, 
      ], 
      uglify: { 
       no_mangle: true 
      }, 
     } 
    } 
} 

... и просто заполнить пробелы, мой файл main.hbs имеет этот сценарий тег

<script data-main="/build/config" src="/js/vendor/require.js"></script> 

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

я пытаюсь сделать это, добавив следующий код в конце соответствующей страницы

<script type="text/javascript"> 
    require(['scripts/page1']); 
</script> 

page1.js файл выглядит так ...

define(['jquery', 'touchSwipe'], function ($j) { 
    ... 
}); 

Времена, когда эти ошибки не появляются, сайт работает нормально. Еще одна вещь, которую следует отметить, это то, что это только кажется, когда я запускаю код через задачу Grunt.

Проблема в том, что URL-адреса в ошибках ошибочны. jQuery следует искать в/build/vendor/rather than/build /, тогда как touchSwipe - это путь, который я определил для библиотеки. Это похоже на вопрос о сроках; конфигурация загружается после нового файла.

ответ

0

Я понял это

Мне нужно указать файлы в Грунта под модулями, например, так

modules: [ 
    //First set up the common build layer. 
    { 
     //module names are relative to baseUrl 
     name: 'config', 
     include: [ 
      'jquery', 
      'touchSwipe', 
      'jquery-ui', 
      'modernizr' 
     ] 
    }, 
    { 
     name: 'scripts/page1', 
     exclude: ['config'] 
    } 
], 

затем вместо того, чтобы добавить файл конфигурации в тэгом, я сделал это

require(['./build/config'], function() { 
    require(['scripts/page1']); 
}); 

и я добавил

baseUrl: "build" 

в мой файл конфигурации, и это, похоже, сделало трюк

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