typescript - Angular - Agregar módulo externo local a la aplicación
Tengo un proyecto my-components y un proyecto my-showcase. my-components es una biblioteca de Angular y my-showcase es una aplicación de Angular. En el momento en que cambio o agrego un componente en la biblioteca, hago un commit en git privado y lo publico en npm privado. Luego, puedo usarlo en otras aplicaciones como my-showcase. Antes del commit y la publicación lo probaría. Hasta ahora, creo y desarrollo un nuevo componente en my-showcase. Después de terminar, lo pongo en my-components.
Al momento de importar mi biblioteca de componentes Angular a través de npm:
import {TimePickerModule} from '@company/components';
Para pruebas y desarrollo cambio esto a la ruta local:
import {TimePickerModule} from '../../../../company-components/projects/components/src';
Desafortunadamente, recibo el siguiente mensaje de error:
WARNING in ../company-components/node_modules/@angular/core/fesm5/core.js 15153:15-36
Critical dependency: the request of a dependency is an expression
Y :
core.js:12584 ERROR Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[DcStickyBitsDirective -> ElementRef]:
StaticInjectorError(Platform: core)[DcStickyBitsDirective -> ElementRef]:
NullInjectorError: No provider for ElementRef!
Aparentemente, el componente de la biblioteca en la aplicación my-showcase usa la carpeta node_module incorrecta de my-components (especialmente @angular/core), no la carpeta node_module de my-showcase.
¿Alguien tiene una solución para mí o tengo un entendimiento incorrecto al tratar con Angular Library y NPM? Si fue demasiado incomprensible, por favor háganmelo saber.
Respuesta #1
Tengo una solución alternativa. Agrego lo siguiente a tsconfig.json:
"@company/components": [
"../path/to/projects/components/src"
],
"@angular/*": [
"node_modules/@angular/*"
]
Pero no encuentro esta solución muy limpia. Si entiendo correctamente, el problema es que Webpack toma las cosas de Angular de la biblioteca de componentes y no del proyecto de demostración. Con esta solución alternativa, se sobrescriben las rutas incorrectas.
