首页 文章

是否值得从Angular 2迁移到Angular 4?

提问于
浏览
26

您好SO社区和Angularians!

因此,我正在Angular 2中开发一个巨大的平台 . 我意识到Angular 2的许多外部库和依赖项正在迁移到新的Angular 4.很明显,给了我许多错误 .

我可以分叉这些库并使用分叉版本并订阅主库开发,或者我可以升级到Angular 4我的项目 .

要回答的问题是为了确定我是否值得迁移:

  • Compatibility with Angular 2.4

我找到了一些调整以确保与遗留的兼容性,如下所示:https://github.com/angular/angular/commit/e99d721

  • Changes app wide

我是否必须完成整个应用程序并开始修复?

我的意思是,主要功能是否以这样的方式重新设计,我将不得不审查其中的许多功能?

或者,是否有许多构建/核心不兼容性,这将使我几天占用修复编译错误/警告而不是开发?

I am not asking for someone to do the research for me ,我问人们可能已经完成了这个过程,或者只是熟悉两个版本,以便给我一些经验提示,澄清等 .

目前,我在这里做研究:

UPDATE

I just migrated to Angular 4 . @PierreDuc在他的回答中提供的链接是一个非常好的工具,可以在迁移过程中获得合适的指导 .

我建议:

我还建议您提交当前项目,在dev存储库中创建一个新分支,然后继续在该分支中进行迁移 .

An issue that I encountered
InputOutputContentChild 将从错误的路径导入 .

我的情况:

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';

3 回答

  • 25

    如果您查看更改日志,则需要记住以下几点:

    Before updating

    • 确保不使用extends OnInit ,或对任何生命周期事件使用extends . 而是使用 implements <lifecycle event> .

    • 停止使用 DefaultIterableDifferKeyValueDiffers#factoriesIterableDiffers#factories

    • 停止使用深度导入,这些符号现在标有 ɵ ,不属于我们的公共API .

    • 停止使用 Renderer.invokeElementMethod ,因为此方法已被删除 . 目前没有替代品 .

    During the update

    • 将所有依赖项更新到版本4和最新的打字稿 .

    • 如果您使用的是Linux / Mac,则可以使用: npm install @angular/{animations,common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router}@4.0.0 typescript@latest --save

    • 如果您在应用程序中使用动画,则应在App NgModule 中从 @angular/platform-browser/animations 导入 BrowserAnimationsModule .

    • RootRenderer 替换为 RendererFactory2 .

    • Renderer 替换为 Renderer2 .

    After the update

    • template 标记重命名为 ng-template .

    • OpaqueTokens 替换为 InjectionTokens .

    • 如果您调用 DifferFactory.create(...) 删除 ChangeDetectorRef 参数 .

    • ngOutletContext 替换为 ngTemplateOutletContext .

    • CollectionChangeRecord 替换为 IterableChangeRecord

    source

  • 2

    Angular团队宣布,让我们不要调用角度2或角度4让我们称之为Angular,并且每6个月会有一次重大更新 . 我在角度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
                ),
    

    并在app.module.ts文件中安装 @angular/animations 包并导入

    import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
    
    @NgModule({
        imports: [
            BrowserAnimationsModule
        ]
    })
    

    我更愿意更新到最新版本的角度 . Angular V4.0.0降低了包装重量,提高了性能 .

  • 2

    这是一个很好的12分钟视频,演示如何migrate from angular 2 to angular 4 . 说和完成有3个基本步骤: -

    1)删除旧的node_modules文件夹以避免对2.X的任何引用

    2)在package.json中将所有@angular更改为4.0.0并进行NPM安装 . 如果可能,请清除缓存 .

    3)在进行NPM安装时,很可能会出现对等版本不匹配的情况 . 纠正它 . 以上视频介绍了如何修复同伴不匹配问题 .

    正如上面的答案中所说,你需要为事件等实现接口 . 出于某种原因,我没有遇到任何问题,事件就像以前在Angular 2中那样有效 .

    enter image description here

相关问题