Grails run-приложение обслуживает javascript, начинающийся со строки NODE_ENV

#javascript #debugging #grails

#javascript #отладка #граали #grails

Вопрос:

При запуске приложения Grails 4 с использованием «grails run-app» каждый файл javascript, предоставляемый веб-сервером, начинается со строки:

 var process = process || {env: {NODE_ENV: "development"}};
  

Эта строка не является частью исходного кода javascript и, вероятно, сгенерирована плагином asset-pipeline. Это сбивает с толку мои среды разработки (как intellij, так и VSCode) и разрушает обработку точек останова.

Кто-нибудь знает, как я могу избежать «grails run-app», генерирующего эту строку заголовка?

Некоторая информация о версии:

  • Граали 4.0.5
  • актив-конвейер-граали: 3.2.4
  • java-версия 11.0.9.

Я сгенерировал приложение ‘helloworld’ с помощью ‘grails create-app’ и запустил его, ничего не изменяя, используя ‘grails run-app’. Даже сейчас каждый обслуживаемый файл javascript имеет строку заголовка.

Комментарии:

1. Хорошо, заголовок генерируется пакетом JsNodeInjectProcessor asset-pipeline-core, который прикрепляется asset.pipeline.JsEs6AssetFile, включенным в META-INF/asset.specs. Я не нашел документации, в которой я мог бы выбрать конвейер (asset.pipeline. JsAssetFile iso asset.pipeline.JsEs6AssetFile). Магия грааля!

2. » Я не нашел документации, в которой я мог бы выбрать конвейер» — эти документы доступны по адресу asset-pipeline.com/manual/#extending .

3. @JeffScottBrown в этом руководстве описано, как писать собственные компоненты конвейера. Я ничего не мог найти о том, как выбрать конкретные компоненты. Мне следовало бы выразиться об этом более ясно. Руководство, на которое вы указываете, было бесценным для написания компонента, упомянутого в моем решении.

Ответ №1:

Оказывается, вам нужно перезаписать конвейер ресурсов по умолчанию своим собственным конвейером. Ваш собственный конвейер не будет использовать JsNodeInjectProcessor, который является виновником.

Определение собственного конвейера включает в себя следующие шаги:

  • измените build.gradle, чтобы все модули asset-pipeline были доступны во время компиляции
  • создайте MyJsAssetFile на основе JsAssertFile из пакета -core. Из переменной processors исключите JsNodeInjectProcessor.
  • создайте файл main/resources/META-INF/asset-pipeline/asset.specs, оставив asset.pipeline.JsAssetFile и замена его на MyJsAssetFile

Это приведет к тому, что файлы javascript будут без строки заголовка, и, что наиболее важно, моя среда разработки Intellij сможет отлаживать мою логику javascript, встроенную в мое приложение grails.