当使用类装饰器时,Angular2 + Jspm.io:reflect-metadata shim是必需的

我遇到以下问题,运行Angular2和SystemJS(版本:Angular@2.0.0-alpha.27,JSPM@0.16.0-beta.2和SystemJS@0.18.0)以下版本的JSPM一旦打字稿是编译(没有错误)我在浏览器中得到以下错误:

/jspm_packages/npm/angular2@2.0.0-alpha.27/src/util/decorators.js:70 Uncaught reflect-metadata shim is required when using class decorators 

现在,当我手动包含文件Reflect.js:\ jspm_packages \ npm \ reflect-metadata@0.1.0 \ Reflect.js,问题消失了,但是下一个问题出现,说明列表在另一个angular度文件中是未定义的。

请参阅下面的bitbucket src以获取来自system.js和typescript / jspm.io的configuration文件(src代码)

https://bitbucket.org/schippie/angular-2-jspm-hello-world/src/8af83f2066e5e3e9eede7db495545234f3b0c04a

我想知道的是,如果现在甚至可以使用jspm和system.js一起检索angular度正常工作所需的所有angular度包。 看作system.js的configuration确实清楚地表明angular度取决于它:

 "npm:angular2@2.0.0-alpha.27": { "fs": "github:jspm/nodelibs-fs@0.1.2", "path": "github:jspm/nodelibs-path@0.1.0", "process": "github:jspm/nodelibs-process@0.1.1", "reflect-metadata": "npm:reflect-metadata@0.1.0", "rx": "npm:rx@2.5.1", "url": "github:jspm/nodelibs-url@0.1.0", "zone.js": "npm:zone.js@0.5.1" }, 

但是他们没有被检索(看networking选项卡)

是的,你正在寻找的是可能的,并且很好地工作。 看起来好像你有正确的依赖关系。 我想你只是缺less以下内容,这需要在顶级打字稿或JavaScript文件的开头。 具体来说,这些需要在第一行之前加载的是Angular。

 import 'zone.js'; import 'reflect-metadata'; 

(另一个答案指出了一个详细但是不在现场的解释。)

Robwormald写了一个很好的详细的解释,涵盖了人们可能在这个时候试图获得angularα27与jspm和typecript工作的问题https://gist.github.com/robwormald/429e01c6d802767441ec

如果在Angular 4.4+环境中发生此问题,则可以帮助您重新启动ng serve

Interesting Posts