8 votes

Impossible de lire la propriété 'module' d'undefined lors de la construction de la librairie angular

Je suis en train de convertir une application angulaire en librairie angulaire. J'ai généré le projet angular lib et j'ai lentement déplacé les modules. J'obtiens maintenant l'erreur suivante lors de la construction de la bibliothèque.

ng build lib

Erreur

Cannot read property 'module' of undefined
TypeError: Cannot read property 'module' of undefined
    at MetadataBundler.convertSymbol (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:312:61)
    at createReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:438:27)
    at MetadataBundler.convertReference (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:486:28)
    at MetadataBundler.convertExpression (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:415:37)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:79
    at Array.map (<anonymous>)
    at MetadataBundler.convertMember (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:364:47)
    at C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:70
    at Array.map (<anonymous>)
    at MetadataBundler.convertMembers (C:\Code\abc\client\node_modules\@angular\compiler-cli\src\metadata\bundler.js:349:38)

En général, cette erreur est causée par une tentative d'enregistrement incorrect des dépendances dans le module. Comment puis-je savoir quelle partie de ma configuration provoque cette exception ?

Il fonctionne bien dans une application angulaire.

21voto

Mike Points 46

Si angular décide d'échouer à la compilation de l'aot, vous pouvez essayer d'aller dans node_modules\@angular\compiler-cli\src\metadata\bundler.js et faire un peu de journalisation de la console dans ce fichier. Je commencerais par placer console.log dans la fonction convertSymbol. enter image description here Cela devrait vous fournir des informations sur le chemin du fichier qu'angular cli a utilisé avant de passer à la compilation du module. Par exemple dans mon cas, c'est la réexportation de la constante du baril qui a cassé la compilation enter image description here Donc, trouver toutes les utilisations de TWO_FA_INITIAL_STATE, et importer directement TWO_FA_INITIAL_STATE, a résolu ce problème particulier.

1voto

daiscog Points 3088

Je viens de rencontrer ce problème avec la structure de fichier suivante :

components/component-n/component-n.component.ts
components/index.ts
my-module.ts

components/index.ts contient :

export { ComponentN } from './component-n/component-n.component.ts';

Et my-module.ts contient :

import { ComponentN } from './components';

@NgModule({
  // ...
  declarations: [
    ComponentN
  ]
})
export class MyModule {}

Il s'avère que le compilateur d'Angular ne peut pas faire face à cela et lance l'erreur "Cannot read property 'module' of undefined".

Changer my-module.ts pour importer directement depuis components/component-n/component-n.component.ts à la place, et en supprimant le index.ts l'a réparé pour moi.

0voto

parliament Points 1816

Cela m'est arrivé lorsque j'ai oublié d'exporter un fichier particulier dans mon public-api.ts. Le fichier en question était essentiellement un module Root, qui réexportait simplement d'autres fichiers du module.

Lorsque j'ai essayé d'importer un symbole à partir dudit fichier, j'ai obtenu cette erreur (mais pas même une pile d'appels).

C'est vraiment étrange, mais l'ajout dudit fichier à public-api.ts a réglé le problème (je dis que c'est étrange parce que je n'importais pas le symbole mentionné ci-dessus depuis public-api.ts en premier lieu).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X