Подтвердить что ты не робот

Стоит ли мигрировать с Angular 2 на Angular 4?

Сообщество Hello SO и Angularians!

Итак, я посередине развиваю огромную платформу в Angular 2. И я понял, что многие внешние библиотеки и зависимости для Angular 2 переносятся на новый Angular 4. Дайте мне много ошибок, очевидно.

Я мог бы разветкить эти библиотеки и использовать разветвленные версии и подписаться на главную библиотеку, или я мог бы просто обновить до Angular 4 моего проекта.

Вопросы, на которые нужно ответить, чтобы определить, стоит ли мне мигрировать:

  • Совместимость с Angular 2.4

Я нашел некоторые адаптации для обеспечения совместимости с наследием, например: https://github.com/angular/angular/commit/e99d721

  • Изменяет ширину приложения

Должен ли я пройти через все мое приложение и начать исправление?

Я имею в виду, что основные функции переработаны таким образом, что мне придется пересмотреть многие из них?

Или, есть много несовместимости build/core, которые будут держать меня занятыми на днях исправлением ошибок/предупреждений компиляции вместо разработки?

Я не прошу кого-то сделать для меня исследование. Я спрашиваю людей, что, возможно, уже прошел этот процесс или просто хорошо знаю обе версии, чтобы дать мне несколько советов по опыту, разъяснения, и т.д.

На данный момент я делаю свое исследование здесь:

UPDATE

Я просто перешел на Angular 4. Ссылка, которую @PierreDuc поставил в его ответе, - очень хороший инструмент, чтобы иметь достойный ориентир в процессе миграции.

Я бы порекомендовал:

Я бы также рекомендовал передать ваш текущий проект, создать новую ветку в вашем репозитории dev и продолжить миграцию в этой ветке.

Проблема, с которой я столкнулся:
Input, Output и ContentChild будут импортированы с неправильного пути.

Мой случай:

import { Component, OnInit, OnDestro } from '@angular/core';
import { Input, ContentChild } from "@angular/core/src/metadata/directives";

Решение:

import { Component, OnInit, OnDestroy, Input, ContentChild } from '@angular/core';
4b9b3361

Ответ 1

Если вы проверите журнал изменений, вам нужно запомнить пару вещей:

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

  • Убедитесь, что вы не используете extends OnInit или используете расширения с любым событием жизненного цикла. Вместо этого используйте implements <lifecycle event>.
  • Остановить использование DefaultIterableDiffer, KeyValueDiffers#factories или IterableDiffers#factories
  • Прекратите использовать глубокий импорт, эти символы теперь отмечены ɵ и являются а не частью нашего общедоступного API.
  • Остановить использование Renderer.invokeElementMethod, поскольку этот метод был удален. В настоящее время нет замены.

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

  • Обновите все ваши зависимости до версии 4 и последней версии typescript.
  • Если вы используете Linux/Mac, вы можете использовать: npm install @angular/{animations,common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router}@4.0.0 [email protected] --save
  • Если вы используете анимацию в своем приложении, вам следует импортировать BrowserAnimationsModule из @angular/platform-browser/animations в ваше приложение NgModule.
  • Замените RootRenderer на RendererFactory2.
  • Замените Renderer на Renderer2.

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

  • Переименуйте теги template в ng-template.
  • Замените OpaqueTokens на InjectionTokens.
  • Если вы вызываете DifferFactory.create(...), удалите ChangeDetectorRef аргумент.
  • Замените ngOutletContext на ngTemplateOutletContext.
  • Замените CollectionChangeRecord на IterableChangeRecord

источник

Ответ 2

Angular команда объявила, не позвонив angular 2 или angular 4, позвоните по телефону angular, и на каждые 6 месяцев произойдет серьезное обновление. Я столкнулся с проблемой в angular v4. 0.0, поэтому измените конфигурацию в webpack

  new webpack.ContextReplacementPlugin(
                // The (\\|\/) piece accounts for path separators in *nix and Windows
                /angular(\\|\/)core(\\|\/)@angular/,
                helpers.root('./src'), // location of your src
                {} // a map of your routes
            ),

И установите пакет @angular/анимации и импортируйте файл app.module.ts

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

@NgModule({
    imports: [
        BrowserAnimationsModule
    ]
})

Я предпочту обновить до последней версии angular. angular V4.0.0 уменьшил вес пакетов и увеличил производительность.

Ответ 3

Вот приятное 12-минутное видео, в котором показано, как перейти с angular 2 на angular 4. Упомянутые и сделанные три основных шага: -

1) Удалите старую папку node_modules, чтобы избежать ссылок на 2.X

2) измените все @ angular на 4.0.0 в package.json и выполните установку NPM. Если возможно, очистите кеш.

3) Существует высокая вероятность того, что при установке NPM вы получите несоответствие версии со сверстниками. исправь это. В приведенном выше видео объясняется, как исправить несоответствие сверстников.

Как сказано в приведенных выше ответах, вам нужно реализовать интерфейсы для события и т.д. По какой-то причине я не получал никаких проблем, а события работали так, как это было ранее в angular 2.

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