Откат путей не поддерживается в оптимизаторе (перезагружается)

При создании моего приложения Play 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"

основной.js:

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

В режиме разработки все работает нормально. Другие мои js-библиотеки на основе webjar хорошо работают даже в рабочем режиме (например, «org.webjars» % «angular-elastic» % «2.4.2»).

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

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


person cnmuc    schedule 12.07.2015    source источник


Ответы (1)


Взгляните на этот пост: Как использовать оптимизатор RequireJS в платформе Play?

Оказывается, поддержка оптимизации RequireJS распространяется не на все Webjars, а ограничивается классическими Webjars.

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

И вот еще что:

Не забывайте про квадратные скобки, иначе замены CDN не произойдет. Для готовых скриптов, не требующих requirejs, вы не должны использовать квадратные скобки при объявлении путей. В противном случае rjs откажется от сборки с неподдерживаемым откатом пути к ошибке.

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

'angular-easyfb': '../lib/angular-easyfb/angular-easyfb',
person MipH    schedule 14.07.2015
comment
Еще один способ исправить это - отредактировать build.sbt RjsKeys.paths += ("angular-easyfb" -> ("../lib/angular-easyfb/angular-easyfb" -> "[some CDN url here]")) - person MipH; 14.07.2015
comment
Хорошо, но теперь какое решение является предпочтительным? В чем разница или есть ли какое-то другое влияние на библиотеку или процесс оптимизации? - person icl7126; 04.04.2016
comment
@icl7126 icl7126 Это зависит от того, как вы используете RJS в своем проекте. Например: pipelineStages := Seq(rjs, digest, gzip) - в этом случае RJS возьмет все ваши ЛОКАЛЬНЫЕ файлы js (не в квадратных скобках в main.js), сожмет их до ОДНОГО main.js и отправит пользователю в сжатом виде и с правильными заголовками кеша/дайджеста (стратегия кеша ). НО все файлы CDN (которые находятся в квадратных скобках в main.js) будут загружаться отдельно с общедоступных серверов CDN без влияния RJS (меньше запросов к вашему серверу). - person MipH; 04.04.2016