ts2307 módulo library error encuentra component cannot javascript angular es6-module-loader

javascript - módulo - es6-module-loader no puede localizar @ angular/core en Angular 6



ts no se encuentra el módulo ''@ angular core (1)

Utilicé este es6-module-loader en un proyecto Angular 2 y funcionó muy bien para cargar módulos TypeScript en tiempo real en el navegador web. Ahora, estoy actualizando este proyecto a Angular 6 , pero aquí no se cumplen las dependencias para las imports del módulo de carga. Por ejemplo:

declare var SystemLoader:any; export class DemoClass { constructor() { var source = "export class Foo { " + "constructor() { console.log(''Created the ES6 class foo!''); } " + "execMethod() { console.log(''Executed method!'') }" + "}"; SystemLoader.module(source, {name: _name}).then(function (module: any) { module.Foo.prototype.execMethod(); } } }

Este código anterior funciona en Angular 6 . Cargará el módulo Foo e imprimirá esas líneas en la Console . Pero si consigo el módulo un poco de complejidad y agrego algo de import como este:

declare var SystemLoader:any; export class DemoClass { constructor() { var source = "import {Component} from /"@angular/core/"; " + "export class Foo { " + "constructor() { console.log(''Created the ES6 class foo!''); } " + "execMethod() { console.log(''Executed method!'') }" + "}"; SystemLoader.module(source, {name: _name}).then(function (module: any) { module.Foo.prototype.execMethod(); } } }

Entonces no funcionará y se queja con el error 404 loading @angular/core . Por lo tanto, en Angular 2 esto no fue un problema porque todos los node_modules necesarios para el proyecto fueron cargados por Angular tal como están, pero en Angular 6 parece que todas esas dependencias son Webpack por Webpack y escupidas en un gran archivo JavaScript grande. Entonces, ¿cómo puedo evitar esta simplificación de Webpack para que el módulo dinámico pueda cargar?

Editar:

O al menos una muestra para migrar de es6-module-loader (en desuso) a es-module-loader usando el mismo proceso expuesto anteriormente (cargar el código fuente, compilar [transpilar] y renderizar en la máquina del cliente).


No estoy familiarizado con angular 6, pero el problema parece deberse al proceso de resolución del módulo de webpack, donde el cargador de módulos no tiene la oportunidad de captar la dependencia de ese módulo en el momento de la compilación. Puede haber un par de maneras de abordar esto.

Puede eliminar la adición de @angular/core como una dependencia externa , suponiendo que se declare de manera compatible (como common-js, umd, etc.). Si aún no se ha declarado de esa manera, siempre puede crear un envoltorio alrededor para exponerlo, por ejemplo, como un módulo common-js .

Otra forma es tener un punto de code-split en esta dependencia (ya sea con importaciones dinámicas o con require.ensure ). No estoy seguro de que lo haga, pero si el cargador angular relevante (el que analiza el texto fuente en el código fuente) tiene su oportunidad de funcionar, y su salida es un código compilado, podría hacerlo.