我刚刚将Angular从rc-1
更新为最新rc-3
。
该应用使用JavaScript ES6 和SystemJS。当我使用browsersync运行应用程序时,它可以工作。但是,如果我捆绑应用程序(使用systemjs-builder)然后运行它,我在浏览器控制台中出现此错误
使用类装饰器时需要使用未反映的元数据填充程序。
问题来自使用@angular/http
基本http调用的组件,如果我删除了它import {Http, HTTP_PROVIDERS} from '@angular/http' ;
。
另外,TypeScript不会发生这种情况,但JS ES5和ES6也不会发生这种情况。 Webpack也不会发生这种情况。
我查看了捆绑的代码,看来SystemJS在Angular
代码之前经过了Reflect
代码...只有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]];
}
}
答案 0 :(得分:19)
reflect-metadata
,es6-shim
和zone.js
应该是全局库。因此,您不应像在index.js中那样将它们导入到其中一个模块中。
尝试删除index.js中的import语句,并在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>