2015-07-12 5 views
1

Строй моей игры 2.3 приложения (SBT 0.13.5) с командой «этап активатора» Я получаю сообщение об ошибке:Дорожки нейтрализации не поддерживается оптимизатор («перезагружается»)

Optimizing JavaScript with RequireJS 
Error: Error: paths fallback not supported in optimizer. Please provide a build config path override for angular-easyfb 

build.sbt:

... 
"org.webjars.bower" % "angular-easyfb" % "1.3.1" 

main.js:

shim: { 
    'angular': { 
     deps: ['jquery'], 
     exports: 'angular' 
    }, 
    ... 
    'angular-easyfb': ['angular'] 
}, 
paths: { 
    ... 
    'angular': ['../lib/angularjs/angular'], 
    'angular-easyfb': ['../lib/angular-easyfb/angular-easyfb'], 
    ... 
}}); 

В режиме разработчика все работает отлично. Мои другие js-libs, основанные на webjar, хорошо функционируют даже в режиме производства (например, «org.webjars»% «угло-эластичный»% «2.4.2»).

Google и SO дают мне много результатов для «Отказоустойчивость путей не поддерживается в оптимизаторе». Кажется, что некоторые нашли решение, а другие этого не сделали.

Как я могу (как Java и Javascript) систематически анализировать, в чем проблема?

ответ

1

Посмотрите на этот пост: How to use RequireJS optimizer in Play framework?

It turns out that RequireJS optimization support does not apply to all Webjars, but rather limited to Classic Webjars.

Есть несколько объяснений. Если вы посмотрите на http://mvnrepository.com/artifact/org.webjars.bower/angular-easyfb/1.3.1, и это файл jar, вы не увидите никаких webjars-requirejs.js внутри. Итак, это ваш случай, когда webjar по умолчанию не совместим с requirejs.

А вот еще одна вещь:

Remember to have square brackets, otherwise CDN replacement will not happen. For the non-requirejs ready scripts, you should not have square brackets when declaring the paths. Otherwise, rjs will refuse to build with error path fallback not supported.

Так что попробуйте удалить квадратные скобки из путей:

'angular-easyfb': '../lib/angular-easyfb/angular-easyfb', 
+0

Другой способ исправить это редактировать build.sbt 'RjsKeys.paths + = ("angular-easyfb" -> ("../lib/angular-easyfb/angular-easyfb" -> "[некоторый URL-адрес CDN здесь]")) ' – MipH

+0

Хорошо, но теперь какое решение является предпочтительным? В чем разница или есть какое-то другое влияние на библиотеку или процесс оптимизации? – icl7126

+1

@ icl7126 Это зависит от того, как вы используете RJS в своем проекте. Например: 'pipelineStages: = Seq (rjs, digest, gzip)' - для этого случая RJS возьмет все ваши LOCAL файлы js (не в квадратных скобках в main.js), скомбинируйте их только в ONE main.js и отправьте для пользователя gziped и с правильными заголовками кеша/дайджеста (стратегия кеша). НО все файлы CDN (которые находятся в квадратных скобках в main.js) будут загружаться отдельно от общедоступных серверов CDN без влияния RJS (меньше запросов на ваш сервер). – MipH