При использовании ES6 с помощью Angular2 rc3 требуется нечистовое отражение метаданных.

Я только что обновил Angular от rc-1 до последнего rc-3. Приложение использует JavaScript ES6 и SystemJS. Когда я запускаю приложение с браузером, он работает. Но если я свяжу приложение (с помощью systemjs-builder), а затем запустим его, у меня есть эта ошибка в консоли браузера.

При использовании декораторов классов не требуется обрезка метаданных рефлекса.

Проблема возникает из компонента, использующего @angular/http с базовым HTTP-вызовом, если я удаляю import {Http, HTTP_PROVIDERS} from '@angular/http' ;, он работает.

Кроме того, это не происходит с TypeScript, но это происходит с JS ES5 и ES6. Также это не происходит с Webpack.

Я просмотрел связанный код и кажется, что SystemJS проходит через Angular код до Reflect code... только с es6

index.js

import 'reflect-metadata';
import 'es6-shim';
import 'zone.js';
import {bootstrap} from '@angular/platform-browser-dynamic';
import {App} from './app.js';
bootstrap(App);

app.js

import {Component} from '@angular/core';
import {Http, HTTP_PROVIDERS} from '@angular/http';
@Component({
  selector: 'App',
  template: '',
  providers: [HTTP_PROVIDERS]
})
export class App {
  constructor(http) {}

  static get parameters() {
    return [[Http]];  
  }
}

Ответы

Ответ 1

reflect-metadata, es6-shim и zone.js должны быть глобальными библиотеками. Следовательно, вы не должны импортировать их в один из ваших модулей, как в index.js.

Попробуйте удалить операторы импорта в index.js и ссылаться на них в вашем index.html, как это описано в Angular 2 Quickstart:

<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>