Últimas versiones de Angular2 se quejan con: NgModule DynamicModule utiliza HomeComponent vía " entryComponents"


Desde que cambié a las últimas compilaciones de Angular 2 (es decir, en github, master), recibo las siguientes advertencias sobre todos mis componentes:

NgModule DynamicModule usa HomeComponent vía "entryComponents" pero no fue declarado ni importado! Esta advertencia se convertirá en un error después de final.

Recibo el mismo mensaje de error para todos mis componentes, además de HomeComponent.

¿Puede alguien por favor proporcionar información sobre ellos?

 24
Author: balteo, 2016-08-03

5 answers

Esto también me atrapó. Cambios significativos en RC5 en la forma en que enrutar y arrancar con una dependencia significativa en app.module.ts y @NgModule decorator. La documentación se ha actualizado aquí: https://angular.io/docs/ts/latest / y la lista de cambios aquí: https://github.com/angular/angular/blob/master/CHANGELOG.md

Los cambios principales en el archivo de enrutamiento son cambios en las sentencias import y export. A continuación se ilustra un ejemplo simple que tiene dos componentes, AppComponent y HomeComponent, que sirve HomeComponent de index.html:

Archivo: app.enrutamiento.ts

import { Routes, RouterModule } from '@angular/router';

import { HomeComponent } from './home.component';

const appRoutes: Routes = [
    {
        path: '',
        redirectTo: '/home',
        pathMatch: 'full'
    },
    {
        path: 'home',
        component: HomeComponent
    }
];

export const routing = RouterModule.forRoot(appRoutes);`

Entonces necesitas usar un archivo NgModule:

Archivo: app.módulo.ts

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

import { AppComponent }  from './app.component';
import { HomeComponent } from './home.component';

import { routing }        from './app.routing';

@NgModule({
    imports:      [ BrowserModule, routing ],
    declarations: [ AppComponent, HomeComponent ],
    bootstrap:    [ AppComponent ]
})
export class AppModule { }

Y luego tienes que tirar de AppModule a main.ts y bootstrap usándolo.

Archivo: main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);`

Este patrón no produce el mensaje de advertencia de la consola.

 27
Author: Jon Wade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-12 15:10:16

Hay otra cosa a tener cuidado con respecto a esta advertencia.

Lo estaba recibiendo a pesar de que de hecho estaba declarando el componente en mi módulo y me estaba volviendo loco porque todo parecía ser correcto.

Así que pasé por el compilador .umd.js donde se generaba la advertencia y noté que el componente para el que estaba recibiendo el error se estaba agregando al array de directivas dos veces aquí:

 if (force || !transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
            transitiveModule.directivesSet.add(dirMeta.type.runtime);
            transitiveModule.directives.push(dirMeta);
            declaredDirectives.push(dirMeta);
            this._addTypeToModule(dirMeta.type.runtime, moduleType);
            return true;
        }

Básicamente, incluso aunque el componente ya estaba en directivesSet, transitiveModule.directivesSet.has (dirMeta.tipo.runtime) estaba evaluando a false por lo que se estaba agregando de nuevo y uno de ellos estaba causando que apareciera la advertencia.

Resultó que las instrucciones de importación en mi archivo de enrutamiento y mi archivo de módulo eran ligeramente diferentes. Uno mayúscula la primera letra de un directorio en la ruta, mientras que en el otro el directorio estaba en minúsculas así:

//in routing
import { SomeComponent } from './Directory/some.component';

//in app module
import { SomeComponent } from './directory/some.component';

Una vez que cambié así que los caminos coincidieron, la advertencia desapareció. Todo lo demás parecía funcionar correctamente con la carcasa no coincidente.

 10
Author: doubletriplezero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-19 12:59:02

También necesita agregar cada componente en sus rutas a sus declaraciones NgModule. Muchas repeticiones. Ver problema angular aquí https://github.com/angular/angular/issues/10472

 7
Author: Damian Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-10 10:01:34

Tengo el mismo problema pero en la parte de prueba.

WARN: 'Componente RootCmp en NgModule DynamicTestModule utiliza BlankCmp a través de "entryComponents", pero no fue declarado ni importado en el módulo! Esta advertencia se convertirá en un error después de final.'

¿Cómo configurar el DynamicTestModule ?

 4
Author: sahlouls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-17 15:32:34

Si está actualizando una base de código grande, ninguna de estas respuestas le dirá qué componente olvidó agregar a la aplicación .módulo.ts

La respuesta más cercana (si este es tu problema) la da @doubletriplezero

Menciona ese compilador .umd.js tiene información útil.

De hecho, esto le puede decir exactamente qué componente olvidó importar. Véase

El componente Angular 2 no forma parte de ningún NgModule

Para una respuesta más completa

 1
Author: danday74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:37