Ошибка выполнения с Angular 9 и Ivy: невозможно прочитать идентификатор свойства undefined ; Зона

У нас есть проект Angular 8 с тестами. Мы пытаемся перейти на Angular 9 и выполнили все шаги в https://update.angular.io/#8.0:9.0l3. Все прошло гладко, без проблем. Приложение компилируется без ошибок, все тесты проходят нормально. Мы получаем эту ошибку во время выполнения. Когда мы отключаем Ivy, он работает нормально, поэтому определенно кажется, что он связан с Ivy.

zone-evergreen.js:659 Unhandled Promise rejection: Cannot read property 'id' of undefined ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'id' of undefined
at registerNgModuleType (core.js:35467)
at core.js:35485
at Array.forEach (<anonymous>)
at registerNgModuleType (core.js:35481)
at core.js:35485
at Array.forEach (<anonymous>)
at registerNgModuleType (core.js:35481)
at new NgModuleFactory$1 (core.js:35649)
at compileNgModuleFactory__POST_R3__ (core.js:41403)
at PlatformRef.bootstrapModule (core.js:41768) TypeError: Cannot read property 'id' of undefined
at registerNgModuleType (http://localhost:8080/vendor.js:41436:27)
at http://localhost:8080/vendor.js:41454:14
at Array.forEach (<anonymous>)
at registerNgModuleType (http://localhost:8080/vendor.js:41450:17)
at http://localhost:8080/vendor.js:41454:14
at Array.forEach (<anonymous>)
at registerNgModuleType (http://localhost:8080/vendor.js:41450:17)
at new NgModuleFactory$1 (http://localhost:8080/vendor.js:41602:13)
at compileNgModuleFactory__POST_R3__ (http://localhost:8080/vendor.js:46530:27)
at PlatformRef.bootstrapModule (http://localhost:8080/vendor.js:46859:16)

person Shane    schedule 17.02.2020    source источник
comment
у вас есть ответ?   -  person HD..    schedule 18.02.2020
comment
Похоже на эту проблему: github.com/angular/angular/issues/31314   -  person nclarx    schedule 19.02.2020


Ответы (10)


Я пытаюсь запустить сборку ng build --prod для своего приложения Angular. И это ясно показывает мне, какая у меня проблема. Вы можете попробовать, чтобы узнать, что вам нужно исправить.

person Anton Skybun    schedule 25.02.2020
comment
идеально!!! запуск со сборкой показал ошибку пакета кредитной карты angular-cc-library... TX!!!! - person born2net; 28.03.2020
comment
Спасибо. Я попытался запустить ng build --prod и обнаружил, что проблема связана с пакетом ngx-currency-mask, который несовместим с Ivy. Я просто удалил этот пакет. - person Joel Rodrigues; 27.04.2020
comment
Это сработало отлично. Был старый модуль, который я больше не использовал, но он все еще упоминался в одном из моих модулей. ng serve даже не упомянул об ошибке! Но этот сделал. - person Andrew Junior Howard; 16.05.2020
comment
Я увидел ошибку после запуска ng serve. Я пробежал ng serve --prod и не увидел его. Запуск ng serve снова работал нормально. Режим prod очищает/перестраивает где-то кеш? - person adamdport; 30.09.2020
comment
Ни за что... ng build --prod компилируется нормально - person Davide; 05.11.2020

Наконец-то я смог отследить ошибку. Мне пришлось закомментировать все импортированные модули в app.component.ts, app.module.ts и shared.module.ts и добавить каждый модуль обратно по одному. Наконец, я сузил его до включения angular2-recaptcha. Это включало модуль под названием ReCaptchaModule. В настоящее время я исследую, как обновить или заменить это.

Надеюсь, это хороший совет по устранению неполадок для других.

person Shane    schedule 19.02.2020
comment
В итоге мы завершили обновление до Angular 9, но временно отключили Ivy, пока не сможем обновить/обновить наши зависимости. - person Shane; 19.02.2020
comment
да, это большая работа в некоторых приложениях! - person nclarx; 19.02.2020

попробуйте добавить "enableIvy": true в ts.config под "angularCompilerOptions" и запустите ng serve, это даст вам более точное описание ошибки.

person Katzura    schedule 26.02.2021
comment
В моем случае включение Ivy было решением. После компиляции с Ivy ошибка была в библиотеке FlexLayout, я обновил версию Flex Layout, после чего ошибка была устранена. - person Gaalvarez; 05.05.2021

Тоже столкнулся с этой проблемой. Кажется, это происходит чаще при использовании ссылки NPM для меня. Не могу точно определить, является ли корнем проблемы стороннее приложение или сторонняя библиотека, на которую я ссылаюсь.

VM11697 polyfills.js:3507 Uncaught TypeError: Cannot read property 'id' of undefined
    at registerNgModuleType (VM11699 vendor.js:78834)
    at VM11699 vendor.js:78852
    at Array.forEach (<anonymous>)
    at registerNgModuleType (VM11699 vendor.js:78848)
    at VM11699 vendor.js:78852
    at Array.forEach (<anonymous>)
    at registerNgModuleType (VM11699 vendor.js:78848)
    at new NgModuleFactory$1 (VM11699 vendor.js:79000)
    at compileNgModuleFactory__POST_R3__ (VM11699 vendor.js:83928)
    at PlatformRef.bootstrapModule (VM11699 vendor.js:84257)

Я просто выполняю действия сборки, обслуживания, сборки, разъединения, сборки снова, связывания снова, и это работает. Что раздражает, поскольку это не помогает решить проблему. Также недавно обновился до Angular 9 с 8. Потребовалось некоторое время, чтобы исправить ошибки сборки. Большинство из них относятся к компонентам, которые не импортируются в библиотечный модуль.

Однако я заметил в терминале, где запущена сборка библиотеки:

ERROR in Tried to overwrite /Users/keith/Development/ngx-atoms/dist/atoms/lib/directives/collapse/collapse.directive.d.ts.__ivy_ngcc_bak with an ngcc back up file, which is disallowed.

Если кто-то сталкивался с таким же, было бы здорово помочь, чтобы достичь дна.

person kmjb    schedule 29.02.2020

В качестве альтернативы

Наконец-то я смог отследить ошибку. Мне пришлось закомментировать все импортированные модули в app.component.ts, app.module.ts и shared.module.ts и добавить каждый модуль обратно по одному. Я, наконец, сузил его до включения angular2-recaptcha. Это включало модуль под названием ReCaptchaModule. В настоящее время я исследую, как обновить или заменить это.

Надеюсь, это хороший совет по устранению неполадок для других.

Вы можете сделать «ng build», в моем случае это показало, что моя версия angular2-multiselect-dropdown несовместима с Ivy. Обновление этого пакета помогло мне. Так что это довольно простой способ обнаружить некоторую несовместимость.

person Erik Almeida    schedule 10.03.2020
comment
Для меня, поддерживая Ivy включенным, как ng build, так и ng build --prod были успешными, но они терпят неудачу, когда я выполняю ng serve. Не смог найти первопричину. - person Ganesh; 02.07.2020

Похоже проблема с компиляцией модулей. Попробуйте очистить node_modules и запустить:

ngcc --properties main

Согласно этому комментарию: https://github.com/angular/angular/issues/31314#issuecomment-562373301

person nclarx    schedule 19.02.2020
comment
да, я очистил свои node_modules, запустив: npm ci - person Shane; 19.02.2020

Для себя я проверил, совместимы ли пакеты, которые я использовал, с Angular9. Как только я удалил несовместимые пакеты, все работает.

примечание: я также использовал angular2-recaptcha, который несовместим с Angular9.

person maxisam    schedule 09.04.2020

Для тех, кто читает это и сталкивается с той же проблемой.

Мое решение заключалось в том, чтобы добавить это в пакет json в build.options:


 "preserveSymlinks": true

person sdev95    schedule 12.06.2020
comment
Возможно, angular.json. Во всяком случае у меня не работает - person Davide; 05.11.2020

Для меня ng build --prod выдавал более 2000 строк ошибок. Большинство из них были даже из угловых встроенных функций, например. канал даты не может быть найден. Решено, выполнив следующие действия:

  • запустил npx ngcc для компиляции сторонних компонентов в ivy.
  • добавлена ​​точка отладки в браузере, где возникает ошибка на изображении ниже
  • это привело меня к тому, что я нашел проблемный плагин (который в моем случае был ngx-slick), но его нигде не было в журналах.
  • только что обновил этот проблемный плагин до последней версии, и вуаля!

введите здесь описание изображения

person Zonaib    schedule 03.12.2020

Это произошло со мной на моем Mac сегодня после обновления до 11.3.1.

Я удалил папку node_modules, и когда я запустил npm i, он пожаловался No Xcode or CLT version.

Чтобы решить, я побежал

sudo xcode-select --reset

См. эту статью для получения дополнительной информации об этом.

person Mukus    schedule 16.05.2021