Ошибка Angular Internel при сборке с использованием `ng build --prod'

Я получаю сообщение об ошибке при создании углового приложения с использованием флага --prod. Я не могу добраться до какой-либо точки, так как стек показывает ошибку на более низком уровне компилятора. Что вызывает ошибки?

Когда я запускаю ng build без флага --prod, он компилируется без ошибок.

Перед ошибкой регистрируется следующее предупреждение:

Warning: Can't resolve all parameters for TodoDateService in /srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/src/app/todo-date.service.ts: (?). This will become an error in Angular v6.x

Ниже приведены сведения об ошибке:

ERROR in Error: Internal error: unknown identifier []

at Object.importExpr$1 [as importExpr] (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:25374:27)

at /srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:20497:37
at Array.map (<anonymous>)

at InjectableCompiler.depsArray (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:20463:25)

at InjectableCompiler.factoryFor (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:20527:36)

at InjectableCompiler.injectableDef (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:20546:42)

at InjectableCompiler.compile (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:20556:106)

at /srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:25219:90
at Array.forEach (<anonymous>)

at AotCompiler._emitPartialModule2 (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:25219:25)

at /srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:25212:48
at Array.reduce (<anonymous>)

at AotCompiler.emitAllPartialModules2 (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler/bundles/compiler.umd.js:25211:26)

at AngularCompilerProgram._emitRender2 (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler-cli/src/transformers/program.js:336:31)

at AngularCompilerProgram.emit (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@angular/compiler-cli/src/transformers/program.js:211:25)

at AngularCompilerPlugin._emit (/srv/http/learn-javascript/app/ngtodo/ngtodo-angular-project/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:1038:49)

Вот мой код файла AppModule: app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { TodoViewComponent } from './todo-view/todo-view.component';
import { ImportantTodoViewComponent } from './important-todo-view/important-todo-view.component';
import { NewTodoComponent } from './new-todo/new-todo.component';
import { ReactiveFormsModule } from '@angular/forms';
import { MessageComponent } from './message/message.component';
import { AngularFontAwesomeModule } from 'angular-font-awesome';
import { NormalTodoViewComponent } from './normal-todo-view/normal-todo-view.component';
import { HiddenTodoViewComponent } from './hidden-todo-view/hidden-todo-view.component';
import { EditTodoComponent } from './edit-todo/edit-todo.component';
import { ActionsComponent } from './actions/actions.component';
import { AboutComponent } from './about/about.component';

@NgModule({
  declarations: [
    AppComponent,
    DashboardComponent,
    TodoViewComponent,
    ImportantTodoViewComponent,
    NewTodoComponent,
    MessageComponent,
    NormalTodoViewComponent,
    HiddenTodoViewComponent,
    EditTodoComponent,
    ActionsComponent,
    AboutComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    ReactiveFormsModule,
    AngularFontAwesomeModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})

export class AppModule { }

Далее следует todo-date-service.ts.

import { TodoDate } from './TodoDate';
import { Injectable } from '@angular/core';

const months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
];


@Injectable({
    providedIn: 'root'
})

export class TodoDateService {
private date: Date;

constructor(date: string = null) {
  if (date) {
    this.date = new Date(date);
  } else {
    this.date = new Date();
  }
}

getDate() {
  const date = String(this.date.getDate());
  const month = months[this.date.getMonth()];
  const year = String(this.date.getFullYear());
  let hour = String(this.date.getHours());
  let meridiem: string;
  let minutes = String(this.date.getMinutes());

  if (Number(minutes) < 10) {
    minutes = `0${minutes}`;
  }

  if (Number(hour) <= 11) {
    if (Number(hour) === 0) {
      hour = '12';
    }

    if (Number(hour) < 10) {
      hour = `0${hour}`;
    }

    meridiem = 'AM';
  } else {
    if (Number(hour) !== 12) {
      hour = String(24 - Number(hour));
    }

    if (Number(hour) < 10) {
      hour = `0${hour}`;
    }
    meridiem = 'PM';
  }

  const todoDate: TodoDate = {
    dateString: `${date} ${month}, ${year}`,
    timeString: `${hour}:${minutes} ${meridiem}`
  };

  return todoDate;
}

getUnixTime() {
  return this.date.getTime();
}
}

person Ahmad Raza    schedule 29.08.2019    source источник
comment
Здесь не хватает только AppModule. Не могли бы вы предоставить весь код? В качестве примера StackBlitz   -  person Sergey Mell    schedule 30.08.2019
comment
@SergeyMell, пожалуйста, укажите, какой код вы запрашиваете? какой-то конкретный файл? Так как я понятия не имею, откуда взялась эта ошибка, то не могу заподозрить какой-то конкретный файл. Я проверил каждый любой файл .ts, но нигде не видел такой проблемы.   -  person Ahmad Raza    schedule 30.08.2019
comment
Я не могу сказать вам наверняка. Кажется, у вас проблема с компилятором AOT, но трудно сказать, где именно. Если ваш проект достаточно большой, просто попробуйте отключить части проекта, чтобы локализовать ошибку.   -  person Sergey Mell    schedule 30.08.2019
comment
@SergeyMell одна вещь, о которой меня предупредили, и добавил относительный файл! Пожалуйста, просмотрите вопрос. Может, там что-то случилось нехорошее. (Линтер проверил все файлы и снова не выдал ошибки)   -  person Ahmad Raza    schedule 30.08.2019


Ответы (1)


Ваш конструктор todo-date-service.ts определенно неверен:

constructor(date: string = null) {
  if (date) {
    this.date = new Date(date);
  } else {
    this.date = new Date();
  }
}

Пока он помечен как внедряемый сервис, Angular попытается найти подходящий сервис для внедрения в него. Однако вы ожидаете там примитива, что неверно. Пожалуйста, прочтите об внедрении зависимостей в Angular.

person Sergey Mell    schedule 29.08.2019
comment
Да, это вызвало проблемы, я сделал его неинъекционным, и это сработало. Спасибо - person Ahmad Raza; 30.08.2019