Error : Intenté encontrar el código de arranque, pero especifique el código de arranque analizable estáticamente o pase un módulo de entrada a las opciones de complementos.
principal.ts
getHttp().get('/assets/config.json').toPromise() .then((res: Response) => { let conf = res.json(); platformBrowserDynamic().bootstrapModule(createAppModule(conf)); })Estoy usando angular-cli. Con angular v2.3.1, este código funcionaba bien.
Quiero buscar json y pasarlo a los proveedores de @Ngmodules
{ provide: Config, useValue: conf }Si los datos que está obteniendo de config.json son solo una configuración de un módulo de aplicación y está tratando de crear un servicio de Config para almacenarlos, creo que lo mejor sería asignarlo al environment y leerlo en su Config . servicio más tarde. El environment está disponible en main.ts , por lo que no es necesario piratear ( createAppModule ).
import { environment } from './environments/environment'; import { AppModule } from './app/'; getHttp().get('/assets/config.json').toPromise() .then((res: Response) => { let conf = res.json(); environment.settings = conf; platformBrowserDynamic().bootstrapModule(AppModule); }); También debe declarar todas las propiedades nuevas del environment en su archivo src/environments/environment.ts .
El cli está intentando usar la compilación anticipada. Debido a esto, necesita poder encontrar su NgModule principal.
Por lo general, el compilador AOT puede hacer esto de forma estática simplemente buscando llamadas de arranque. Sin embargo, no está arrancando de inmediato, por lo que el compilador necesita que le diga explícitamente el nombre del módulo de su aplicación para que pueda compilarlo y todos sus componentes.
ng eject y configurar manualmente entryModule La solución preferida es decirle a la cli el nombre de su entryModule . Esto permitirá que AOT funcione y le brinde todos sus beneficios. Sin embargo, el cli actualmente no es compatible con esto (pero hay un PR para agregar una opción # 4077 ).
La solución actual es usar ng eject --aot para cambiar a una compilación manual basada en un paquete web. Luego puede configurar su entryModule directamente.
ng eject --aotwebpack.config.js y busque el new AotPluginAppModuleentryModule: 'path/to/app.module#AppModule' Puede omitir este problema por completo usando el indicador --no-aot si solo necesita que una compilación funcione. Esto no se recomienda ya que su aplicación será mucho más lenta y más grande de lo que normalmente sería (tendrá que compilar componentes en tiempo de ejecución y tendrá que enviar el compilador que es grande).
ng prod --no-aot
La respuesta aceptada no funcionó para mí. Extraer la parte bootstrapModule permitirá que Angular encuentre el código de arranque.
import { environment } from './environments/environment'; import { AppModule } from './app/'; const bootstrap = () => { platformBrowserDynamic().bootstrapModule(AppModule); }; getHttp().get('/assets/config.json').toPromise() .then((res: Response) => { let conf = res.json(); environment.settings = conf; bootstrap(); });