#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 в первую очередь)