Не удается прочитать свойство ‘module’ undefined при построении библиотеки angular

#angular #ng-packagr

#angular #ng-packagr

Вопрос:

Я конвертирую приложение angular в angular lib. Я сгенерировал проект angular lib и медленно перемещал модули. Теперь я получаю следующую ошибку при сборке библиотеки.

ng build lib

Ошибка

 Cannot read property 'module' of undefined
TypeError: Cannot read property 'module' of undefined
    at MetadataBundler.convertSymbol (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:312:61)
    at createReference (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:438:27)
    at MetadataBundler.convertReference (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:486:28)
    at MetadataBundler.convertExpression (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:415:37)
    at C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:364:79
    at Array.map (<anonymous>)
    at MetadataBundler.convertMember (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:364:47)
    at C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:349:70
    at Array.map (<anonymous>)
    at MetadataBundler.convertMembers (C:Codeabcclientnode_modules@angularcompiler-clisrcmetadatabundler.js:349:38)
 

Обычно эта ошибка возникает при попытке неправильно зарегистрировать зависимости в модуле. Как я могу найти, какая часть моей конфигурации создает это исключение?

Он отлично работает в приложении angular.

Комментарии:

1. Вы использовали ng generate library my-lib сначала?

2. ДА. Сначала я сгенерировал библиотеку, и она создавалась нормально.

3. можете ли вы попробовать --watch флаг?

4. Также попробуйте эту --buildEventLog=buildEventLog опцию

5. —buildEventLog=buildEventLog не предоставляет никакой полезной информации.

Ответ №1:

Если angular решит потерпеть неудачу при компиляции aot, вы можете попытаться войти node_modules@angularcompiler-clisrcmetadatabundler.js и выполнить некоторые консольные записи в этом файле. Я бы начал с размещения консоли.войдите в функцию convertSymbol. введите описание изображения здесьЭто должно предоставить вам некоторую информацию о пути к файлу, который angular cli использовал перед тем, как перейти к компиляции модуля. Например, в моем случае это был реэкспорт константы из бочки, который прервал компиляциювведите описание изображения здесь, поэтому поиск всех вариантов использования TWO_FA_INITIAL_STATE и прямой импорт TWO_FA_INITIAL_STATE устранил эту конкретную проблему.

Комментарии:

1. Это было действительно полезно. В моем случае у меня был модуль API, который создавался из Swagger, но который я не импортировал в свой компонентный модуль.

Ответ №2:

Я только что столкнулся с этой проблемой со следующей файловой структурой:

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

Где components/index.ts содержит:

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

И my-module.ts содержит:

 import { ComponentN } from './components';

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

Оказывается, компилятор Angular не может справиться с этим и выдает ошибку «Не удается прочитать свойство ‘module’ undefined».

Изменение my-module.ts на импорт напрямую из components/component-n/component-n.component.ts instead и удаление index.ts , исправили это для меня.

Ответ №3:

Это случилось со мной, когда я забыл экспортировать определенный файл в свой public-api.ts. Рассматриваемый файл был в основном корнем модуля, просто повторно экспортируя другие файлы из модуля.

Когда я попытался импортировать символ из указанного файла, это выдало бы мне эту ошибку (но даже не стек вызовов).

Это действительно довольно странно, но добавление указанного файла в public-api.ts устранило проблему (я говорю, что это странно, потому что я не импортировал вышеупомянутый символ из public-api.ts в первую очередь)