Миграция угловая 5 на угловую 7 - PullRequest
0 голосов
/ 17 декабря 2018

Я перешел с Angular 5 на Angular 7. После этого у меня возникла проблема с моей операцией RxJs, например, наблюдаемой и моим @ ngrx / store.Вот моя ошибка:

ERROR in node_modules/@ngrx/store/src/actions_subject.d.ts(2,10): error TS2305: Module C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/BehaviorSubject"' has no exported member 'BehaviorSubject'.
node_modules/@ngrx/store/src/reducer_manager.d.ts(2,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/BehaviorSubject"' has no exported member 'BehaviorSubject'.
node_modules/@ngrx/store/src/reducer_manager.d.ts(3,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@ngrx/store/src/scanned_actions_subject.d.ts(2,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Subject"' has no exported member 'Subject'.
node_modules/@ngrx/store/src/state.d.ts(2,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/BehaviorSubject"' has no exported member 'BehaviorSubject'.
node_modules/@ngrx/store/src/state.d.ts(3,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@ngrx/store/src/store.d.ts(2,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Observer"' has no exported member 'Observer'.
node_modules/@ngrx/store/src/store.d.ts(3,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@ngrx/store/src/store.d.ts(4,10): error TS2305: Module '"C:/Users/AbousyllabaNdiaye/Documents/amundi/ClientAmundiFileIntegration/node_modules/rxjs/Operator"' has no exported member 'Operator'.
node_modules/rxjs/BehaviorSubject.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/BehaviorSubject'.
node_modules/rxjs/Observable.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/Observable'.
node_modules/rxjs/Observer.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/Observer'.
node_modules/rxjs/Operator.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/Operator'.
node_modules/rxjs/Subject.d.ts(1,15): error TS2307: Cannot find module 'rxjs-compat/Subject'.
src/app/habilitation/habilitation.component.ts(96,36): error TS2339: Property 'subscribe' does not exist on type 'Store<Principal>'.
src/app/sidebare/sidebare.component.ts(17,36): error TS2339: Property 'subscribe' does not exist on type 'Store<Principal>'.

Ответы [ 3 ]

0 голосов
/ 21 марта 2019

npm i rxjs-compat

Если вы хотите, чтобы решение работало быстро!В противном случае следуйте приведенному выше решению.

0 голосов
/ 27 мая 2019

Пожалуйста, следуйте нижеуказанным пунктам при обновлении угловых 5 до 7

Angular Update Guide | 5.2 -> 7.2 for Advanced Apps

Перед обновлением

1) Если вы импортируете какие-либо анимациисервисы или инструменты из @ angular / core, вы должны импортировать их из @ angular / animations

2) Заменить ngOutletContext на ngTemplateOutletContext.

3) Заменить CollectionChangeRecord на IterableChangeRecord

4) Везде, где вы используете Renderer, теперь используйте Renderer2

5) Если вы используете preserveQueryParams, вместо этого используйте queryParamsHandling

6) Если вы используете устаревшие HttpModule и Httpсервис, переключитесь на HttpClientModule и сервис HttpClient.HttpClient упрощает эргономику по умолчанию (вам больше не нужно отображать на json) и теперь поддерживает типизированные возвращаемые значения и перехватчики.Подробнее об angular.io

7) Если вы используете DOCUMENT из @ angular / platform-browser, вы должны начать импортировать его из @ angular / common

8) Везде, где вы используете ReflectiveInjector,теперь используйте StaticInjector

9) Выберите значение off для preserveWhitespaces в вашем tsconfig.json под ключом angularCompilerOptions, чтобы получить преимущества этого параметра, который по умолчанию был отключен в v6.

Во время обновления

1) Убедитесь, что вы используете Node 8 или более позднюю версию

2) Обновите Angular CLI глобально и локально и перенесите конфигурацию в новуюформат angular.json, выполнив следующее:

npm install -g @angular/cli npm install @angular/cli ng update @angular/cli

3) Обновите все скрипты, которые могут быть в вашем package.json, чтобы использовать последние команды Angular CLI.Все команды CLI теперь используют две черточки для флагов (например, ng build --prod --source-map) для совместимости с POSIX.

4) Обновите все ваши пакеты Angular Framework до v6 и верную версиюRxJS и TypeScript.

ng update @angular/core

После обновления TypeScript и RxJS будут более точно передавать типы через ваше приложение, что может приводить к существующим ошибкам при наборе вашего приложения

5) В Angular Forms AbstractControl # statusChanges теперь генерирует событие PENDING, когда вы вызываете AbstractControl # markAsPending.Убедитесь, что если вы фильтруете или проверяете события из statusChanges, которые вы учитываете для нового события при вызове markAsPending.

6) Если вы используете totalTime из AnimationEvent в отключенной зоне, он больше не будет сообщать время0. Чтобы определить, сообщает ли событие анимации об отключенной анимации, вместо этого можно использовать свойство event.disabled.

7) Теперь ngModelChange генерируется после обновления значения / действительности в его элементе управления, а не долучше соответствовать ожиданиям.Если вы полагаетесь на порядок этих событий, вам нужно будет начать отслеживать старое значение в вашем компоненте.

8) Обновить угловой материал до последней версии.

ng update @angular/material

Это также автоматически перенесет устаревшие API.

9) Используйте ng update или обычные инструменты диспетчера пакетов для выявления и обновления других зависимостей.

10) Если вы настроили TypeScript набыть строгим (если в файле tsconfig.json вы установили строгое значение true), обновите свой tsconfig.json, чтобы отключить strictPropertyInitialization, или переместите инициализацию свойства из ngOnInit в свой конструктор.Вы можете узнать больше об этом флаге в примечаниях к выпуску TypeScript 2.7.

11) Удалите устаревшие функции RxJS 6, используя правила автоматического обновления rxjs-tslint

Для большинства приложений это будет означать запуск следующих двухкоманды:

npm install -g rxjs-tslint rxjs-5-to-6-migrate -p src/tsconfig.app.json

12) Angular теперь использует TypeScript 3.1, узнайте больше о любых возможных критических изменениях: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-1.html

13) Angular теперь добавил поддержку дляУзел 10: https://nodejs.org/en/blog/release/v10.0.0/

14) Обновите v7 базовой платформы и CLI, запустив ng update @ angular / cli @ angular / core в своем терминале

15) Обновите Angular Material доv7, запустив ng update @ angular / material в своем терминале.Вам следует протестировать приложение на предмет изменения размеров и макета.

16) Если вы используете тесты со скриншотами, вам нужно будет восстановить золотые файлы на скриншоте, так как появилось много мелких визуальных настроек

После обновления

1) После того как вы и все ваши зависимости обновитесь до RxJS 6, удалите rxjs-compat.

npm uninstall rxjs-compat

2) Если вы используете работника Angular Service, перенесите все файлы версииed в файлымассив файлов.Поведение такое же.

3) Прекратите использовать matRippleSpeedFactor и baseSpeedFactor для ряби, используя вместо этого конфигурацию анимации.

0 голосов
/ 17 декабря 2018

Вы должны исправить свой Rxjs импорт.Начиная с версии 6 и выше, в использовании rxjs произошли довольно серьезные изменения.

Попробуйте использовать: import { BehaviorSubject } from 'rxjs';

аналогично другим импортам:

import { Observable } from 'rxjs'; import { Operator } from 'rxjs'; Все эти экспортысделаны из rxjs сейчас.Вы можете открыть rxjs/index.d.ts, чтобы увидеть все экспорты rxjs.

Из-за изменения с pipe и конфликта с Зарезервированные слова JavaScript , некоторые операторы должны были быть переименованы:

  1. do становится tap
  2. catch и finally становится catchError finalize
  3. switch становится switchAll

также были переименованы другие функции:

  • fromPromise становится from
  • throw становится throwError
...