5

Как рекламируются, то rjs в Play можетКак использовать оптимизатор RequireJS в платформе Play?

гарантировать, что любые ресурсы JavaScript, указанные в пределах WebJar автоматически отсчитываются от jsdelivr CDN. Кроме того, если будет найден файл .min.js, который будет использоваться вместо .js. Добавленный бонус здесь заключается в том, что никаких изменений не требуется для вашего html!

Однако, похоже, я ничего не могу сработать.

  1. Я попытался запустить свое приложение Play в режиме производства, и все мои javascripts webjar по-прежнему ссылаются на локальные.
  2. Я не вижу версию javascript-файлов .min, используемых в производстве.
  3. Я не могу получить инъекцию зависимости для работы в режиме производства. Например, когда я хочу, чтобы ввести jquery в моем коде, как этот

    определяют ([ 'JQuery'], функция ($) { 'использовать строгий';. console.log ($ Grep); возвращение { сумма: функция (a, b) { возвращение a + b; } }; });

я могу получить эту работу хорошо в режиме разработчика, но и в режиме производства, rjs потерпел неудачу говоря

[info] Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info] Error: Error: ENOENT, no such file or directory '/Users/khanguyen/Desktop/rjsdemo/target/web/rjs/build/js/jquery.js' 
[info] In module tree: 
[info]  main 
[info]  app 
[info] 
[info]  at Error (native) 

Очевидно, что, глядя на неправильное место для JQuery, несмотря на настройки конфигурации сгенерированного по Webjar

requirejs.config({"paths":{"jquery":["/webjars/jquery/1.11.1/jquery","jquery"]},"shim":{"jquery":{"exports":"$"}},"packages":[]}) } 

иметь правильное расположение для jquery.

Я использую Play 2.4.0, с настройкой pipelineStages := Seq(rjs, digest) в моем build.sbt.

Пожалуйста, дайте мне знать, где я ошибся.

Спасибо!

+1

У меня такая же проблема, я задаюсь вопросом, является ли проблема с конфигурацией, и поэтому здесь возникла проблема. Https://github.com/webjars/sample-play2/issues/7 –

+0

Вот что я заметил до сих пор , без четкого объяснения, почему все работает или не работает. Вы должны использовать Classic Webjars. Когда вы объявляете свои «пути» в main.js, оберните URL-адреса в [квадратные скобки]. Я решил отключить модуль Webjar, потому что мне не нужны 2 версии одного и того же файла. Дайте мне знать, как это происходит. Я напишу пост с инструкцией, как только я выясню, как это сделать. – Khanetor

+0

Вы бросили модуль webjar? Значит, вы больше не используете их? Это было бы неудачно. Мне все еще интересно, не хватает ли мы какой-то конфигурации или, возможно, существует несовместимость (sbt-rjs не обновлялся в то время). –

ответ

4

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

Даже тогда файл сборки webjar должен быть включен с регулярным модулем для работы rjs. enter image description here

Если вы посмотрите, например, на классический webjar jQuery, вы увидите, что включена специальная инструкция по сборке webjar. Взгляните на этот файл для вашей информации. enter image description here

Как только вы определили webjar, который является обязательным, вы можете позволить sbt-rjs сделать это.Вот моя установка для справки:

/** javascripts/main.js **/ 
'use strict'; 

requirejs.config({ 
    paths:{ 
     'jquery': ['../lib/jquery/jquery'], 
     'react': ['../lib/react/react'], 
     'bootstrap': ['../lib/bootstrap/js/bootstrap'], 
     'react-bootstrap': ['../lib/react-bootstrap/react-bootstrap'] 
    }, 
    shim: { 
     'bootstrap': { 
      deps: ['jquery'] 
     }, 
     'react-bootstrap': { 
      deps: ['react'] 
     } 
    } 
}); 

Помните, что у вас есть квадратные скобки, иначе замена CDN не произойдет.

Для сценариев, которые не требуются, вы не должны иметь квадратных скобок при объявлении paths. В противном случае rjs откажется строить с ошибкой path fallback not supported. Конечно, вы не получите преимущества CDN. Просто сторона примечания, также требует оптимизации CSS. Но ограничивается только встраиванием css, как это делает регулярный Requirejs.

+0

Спасибо! Я ожидал, что 'requirejs.config' будет сгенерирован, но это, похоже, не так. –

+0

Коррекция, вам не нужны квадратные скобки для замены cdn, чтобы нанести удар. – Khanetor

+0

Несколько вещей, чтобы указать ... 'sbt-rjs' не использует конфигурации WebJar RequireJS. Поэтому при использовании 'sbt-rjs' вы должны вручную создавать свои конфиги. Встроенная конфигурация WebJar RequireJS используется для работы с 'webjars-requirejs.js', но теперь она исходит из' pom.xml' и выставляется через 'webjars-locator' для загрузки модуля RequireJS на стороне клиента. NPM и Bower WebJars должны работать так же, как и Classic WebJars для 'sbt-rjs', так как они извлекаются одинаково. –

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