Проект jhipster не будет собираться для профиля prod: gradlew -Pprod bootWar не работает на taks webpack

ПРОБЛЕМА РЕШЕНА см. Информацию ниже

после поиска решения в течение 2 дней я сдаюсь. Мне не удалось найти подобную проблему в Интернете, и я не знаю, что делать.

Надеюсь, кто-нибудь сможет там помочь ...

Проблема

Приложение создается и работает нормально с gradlew -Pdev bootWar jibDockerBuild

Однако сборка не будет работать при выборе профиля продукта: gradlew -Pprod bootWar jibDockerBuild

Справочное исключение

ERROR in Illegal State: referring to a type without a variable
{"filePath":"D:/dev/myApp/node_modules/@angular/forms/forms.d.ts",
"name":"FormGroupDirective","members":[]}

ПОЛНОЕ ИСКЛЮЧЕНИЕ

При исполнении печатается следующее:

D:\dev\myApp>gradlew -Pprod bootWar jibDockerBuild
> Task :yarn_install
yarn install v1.9.4
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
info [email protected]: The platform "win32" is incompatible with this module.
info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
[4/5] Linking dependencies...
warning " > [email protected]" has unmet peer dependency "[email protected] - 3".
warning " > [email protected]" has unmet peer dependency "popper.js@^1.14.3".
warning " > [email protected]" has incorrect peer dependency "@angular/core@^5.0.0".
[5/5] Building fresh packages...
Done in 97.47s.

> Task :webpack
yarn run v1.9.4
$ yarn run cleanup && yarn run webpack:prod:main && yarn run clean-www
$ rimraf build/{aot,www}
$ yarn run webpack --config webpack/webpack.prod.js --profile
$ node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js --config webpack/webpack.prod.js --profile
(node:28256) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
Hash: 6aab3d14e434ee333c51
Version: webpack 4.8.0
Time: 8812ms
Built at: 2018-10-07 18:52:03
 6 assets
Entrypoint polyfills = app/polyfills.6aab3d14e434ee333c51.bundle.js
Entrypoint global = global.1e92ecdbfdaf2bb32590.css app/global.6aab3d14e434ee333c51.bundle.js
Entrypoint main = app/main.6aab3d14e434ee333c51.bundle.js
[0] ./src/main/webapp/app/app.main.ts 0 bytes {0} [built]
    factory:4638ms building:3545ms = 8183ms
[2] ./src/main/webapp/content/css/global.css 39 bytes {1} [built]
    factory:4639ms building:2778ms = 7417ms
[3] ./src/main/webapp/app/polyfills.ts 0 bytes {2} [built]
    factory:4638ms building:3540ms = 8178ms
    + 1 hidden module

ERROR in Illegal State: referring to a type without a variable {"filePath":"D:/dev/myApp/node_modules/@angular/forms/forms.d.ts","name":"FormGroupDirective","members":[]}
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

> Task :webpack FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':webpack'.
> Process 'command 'yarn.cmd'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.9/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 1m 58s
5 actionable tasks: 3 executed, 2 up-to-date

СРЕДА

Windows 10

Использование версии JHipster, установленной локально в node_modules текущего проекта Выполнение jhipster: info Параметры: from-cli: true Добро пожаловать в вспомогательный генератор информации JHipster

JHipster Version(s)
[email protected] D:\dev\myApp
`-- [email protected]
JHipster configuration, a .yo-rc.json file generated in the root folder
<details>
<summary>.yo-rc.json file</summary>
<pre>
{
  "generator-jhipster": {
    "promptValues": {
      "packageName": "de.myApp.myApp",
      "nativeLanguage": "de"
    },
    "jhipsterVersion": "5.4.1",
    "applicationType": "monolith",
    "baseName": "myApp",
    "packageName": "de.myApp.myApp",
    "packageFolder": "de/myApp/myApp",
    "serverPort": "8080",
    "authenticationType": "session",
    "cacheProvider": "ehcache",
    "enableHibernateCache": true,
    "websocket": false,
    "databaseType": "sql",
    "devDatabaseType": "mysql",
    "prodDatabaseType": "mysql",
    "searchEngine": false,
    "messageBroker": false,
    "serviceDiscoveryType": false,
    "buildTool": "gradle",
    "enableSwaggerCodegen": false,
    "rememberMeKey": "YourJWTSecretKeyWasReplacedByThisMeaninglessTextByTheJHipsterInfoCommandForObviousSecurityReasons",
    "clientFramework": "angularX",
    "useSass": false,
    "clientPackageManager": "yarn",
    "testFrameworks": [],
    "jhiPrefix": "jhi",
    "enableTranslation": true,
    "nativeLanguage": "de",
    "languages": [
      "de",
      "en",
      "fr"
    ],
    "appsFolders": [
      "myApp"
    ],
    "directoryPath": "../",
    "monitoring": "elk",
    "consoleOptions": [
      "curator"
    ],
    "jwtSecretKey": "YourJWTSecretKeyWasReplacedByThisMeaninglessTextByTheJHipsterInfoCommandForObviousSecurityReasons"
  }
}
</pre>
</details>
JDL for the Entity configuration(s) entityName.json files generated in the .jhipster directory

ПРОПУЩЕН

Environment and Tools

версия java "1.8.0_181" Java (TM) SE Runtime Environment (сборка 1.8.0_181-b13) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 25.181-b13, смешанный режим)

git версия 1.8.4.msysgit.0

узел: v8.11.3

npm: 5.6.0

пряжа: 1.9.4

Докер версии 18.06.1-ce, сборка e68fc7a

docker-compose версия 1.22.0, сборка f46880fe


person Kalumet    schedule 07.10.2018    source источник
comment
Я не мог воспроизвести только .yo-rc.json, это может быть связано с одной из форм сущностей   -  person Jon Ruddell    schedule 08.10.2018
comment
Аналогичное сообщение об ошибке в другом вопросе: ссылка на тип без переменной stackoverflow.com/questions/51871904/   -  person Kalumet    schedule 08.10.2018
comment
@JonRuddell, у тебя есть идея, как я могу это узнать?   -  person Kalumet    schedule 08.10.2018
comment
Я пробовал ванильный проект, и сборка работала нормально. Должно быть, это связано с реактивными формами, которые я использую, но я не могу понять причину. Исключение просто не дает достаточно информации. Я попытался использовать параметры DEBUG logging и --stacktrace, но без значимой информации.   -  person Kalumet    schedule 08.10.2018
comment
Не могли бы вы добавить к сообщению простую реактивную форму, в которой воспроизводится проблема?   -  person Jon Ruddell    schedule 08.10.2018
comment
действительно, я думал о том, чтобы попытаться создать ванильный проект с самой простой реактивной формой в соответствии с документацией, чтобы посмотреть, смогу ли я как-то решить проблему.   -  person Kalumet    schedule 09.10.2018


Ответы (1)


Я нашел причину проблемы:

Очевидно, я поместил импорт ReactiveFormModul не в то место. У меня он был в модуле «вверх», но на самом деле мне пришлось поместить его в модуль, где у меня действительно есть компоненты, определяющие форму. Если честно ... Не понимаю, почему именно в этом проблема, может кто прояснит.

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { RouterModule } from '@angular/router';
import { ReactiveFormsModule } from '@angular/forms';

*** other imports

@NgModule({
    imports: [***, ReactiveFormsModule, *** ROUTER stuff,
    declarations: [MyReactiveFormComponent],
    schemas: [***]
})
export class MyReactiveFormModule {} 

После этого я обнаружил и другие проблемы, которые нормально работали в dev-build (опять же ... не понимаю причину. Думаю, это связано с более строгой конфигурацией "компиляции"):

  1. Переменная, ссылающаяся на formGroup, была объявлена ​​частной. Поэтому я получил ошибку компиляции в профиле продукта. Мне пришлось изменить его, чтобы он был доступен по шаблону html.

  2. Переменные, к которым осуществляется доступ в html, должны быть общедоступными (или доступными с помощью метода получения).

  3. Доступ к элементам управления формы в последующих элементах html должен быть «общедоступным».

Пример кода: MyReactiveComponent.ts:

this.myForm = this.fb.group({
            id: [this.myObject.id],
            date: [this.myObject.date, Validators.required],
            number: [this.myObject.number, [Validators.required, Validators.min(2), Validators.max(100)]],
            dynamicOptions: this.fb.array([]),
            prefilledOptions: [this.prefilledOptions, Validators.required]
        }); 

MyReactiveComponent.html:

<div class="row justify-content-center">
<div class="col-8">
    <form [formGroup]="myForm" id="myFormId" novalidate (ngSubmit)="save()" #editForm="ngForm">
        <h2>Create or edit a Play</h2>
        <div>
            <jhi-alert-error></jhi-alert-error>
            <div class="form-group">
                <input type="number" class="form-control" formControlName="number" (blur)="updateNumber()" id="field_number" required min="2" jhiMin="2" max="100" jhiMax="100"/>
                <div [hidden]="!(number?.dirty && number?.invalid)">
                    <small class="form-text text-danger"
                    [hidden]="!number?.errors?.required">
                    This field is required.
                    </small>
...

Для доступа к номеру в "number? .Dirty", например, требуется, чтобы для доступа к нему имелся метод-получатель:

get number() {
    return this.myForm.get('number') as FormControl;
}

Надеюсь, что это поможет другим в борьбе ...

person Kalumet    schedule 12.10.2018