在从Angular2迁移至Angular4时出现了问题,特别是在动画方面无法顺利运行

尝试从Angular2迁移到Angular4时出现了问题。

尝试从Angular2切换到Angular4后,发现动画无法正常工作,因此记录了一些备忘录。

暫時先編譯一下試試看

首先要切换从Angular2到Angular4,需要先修改package.json文件。

参考Quick Start的package.json文件进行重写。
https://github.com/angular/quickstart/blob/master/package.json

...

  "dependencies": {
    "@angular/common": "~4.1.3",
    "@angular/compiler": "~4.1.3",
    "@angular/core": "~4.1.3",
    "@angular/forms": "~4.1.3",
    "@angular/http": "~4.1.3",
    "@angular/platform-browser": "~4.1.3",
    "@angular/platform-browser-dynamic": "~4.1.3",
    "@angular/router": "~4.1.3",
    ...
  },
...

暂时先尝试使用npm update,然后运行npm run build,嗯,并没有成功。出现了以下错误。

node_modules/@angular/animations/src/animation_metadata.d.ts(34,33):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/common/src/platform_id.d.ts(8,42):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/common/src/platform_id.d.ts(9,41):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/common/src/platform_id.d.ts(10,45):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/common/src/platform_id.d.ts(11,44):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/compiler/src/util.d.ts(8,36):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/animation/animation_metadata_wrapped.d.ts(12,33):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/animation/dsl.d.ts(34,33):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/errors.d.ts(9,33):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/errors.d.ts(10,43):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/errors.d.ts(11,42):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/errors.d.ts(12,43):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/core/src/errors.d.ts(13,35):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/forms/src/model.d.ts(6,28):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/forms/src/model.d.ts(10,30):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/forms/src/model.d.ts(15,30):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/forms/src/model.d.ts(20,31):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/http/src/backends/browser_jsonp.d.ts(1,33):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/platform-browser/src/dom/dom_renderer.d.ts(14,41):错误TS1039:在环境上下文中不允许初始化程序。
node_modules/@angular/router/src/shared.d.ts(15,37):错误TS1039:在环境上下文中不允许初始化程序。

当我搜索后,我发现结果显示在这里。
换句话说,这似乎不是一个错误,而是说明你使用的Typescript版本过旧。

再次编辑 package.json 文件中的 typescript 部分(将其版本从最新的 2.3.3 修改为 2.3.3)。

...
  "devDependencied": {
    ...
    "typescript": "2.3.3"
  },
...

尝试运行 npm update,并进行 npm run build。
这次成功编译结束了。

尝试启动服务器

运行npm start来启动服务器,服务器将平稳地启动。

看起来基本上没有任何问题,但在动画相关方面出现了问题。

导入BrowserAnimationsModule或NoopAnimationsModule报错。

image.png

错误.ts:42 错误 错误: 捕获(在承诺中): 错误: 发现了合成属性@slideRightLeft。请在您的应用程序中包含”BrowserAnimationsModule”或”NoopAnimationsModule”之一。

所以,我先谷歌搜索一下,在这里找到了。

就是说,以下两点

在app.module.ts中进行添加

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

...
  imports: [
    ...
    BrowserAnimationsModule,// <- これ
  ],
  ...

安装@angular/animations

npm install --save @angular/animations@latest

让我们试一试这个。

发生错误

发生以下错误:
@angular/platform-browser/bundles/platform-browser.umd.js/animations 404(未找到)

听说文件不在那里,所以我再次搜索了一下,发现它在这里。

总之,似乎是说要在 systemjs.config.js 中添加以下内容,所以请添加。

(function(global) {
  System.config({
    ...
    map: {
      ...
      '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js', // <- これと
      '@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js', // <- これと
      '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js' // <- これ
    },
    ...
  });
})(this);

这样重新启动服务器。
嗯,没有出现错误,但动画不动了。

动画无法播放

去看教程试试看。

这里发生了变化。
ts
import { trigger,state,style,transition,animate,keyframes } from ‘@angular/animations’;

换句话说,@angular/core中的东西似乎被移动到了@angular/animations中。
所以首先要改变那里的内容。

嗯。运行顺利,没有问题。

以下是所見

将从Angular 2迁移到Angular 4其实不是很困难。
可能原本源代码就比较小,但也与TypeScript等版本相关,所以及早跟进最新版本可能有助于避免技术债务的拖欠。

如果有任何建议或意见,请在评论中告诉我。

广告
将在 10 秒后关闭
bannerAds