Angular2 + Jspm.io :使用 class 装饰器时需要反射元数据垫片

Angular2 + Jspm.io : reflect-metadata shim is required when using class decorators

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

/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 问题消失了,但下一个问题出现了,说 list is undefined within another angular 文件。

请参阅下面的 bitbucket src 以获取来自 system.js 和 typescript / jspm.io

的配置文件(src 代码)

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

我想知道的是,目前是否可以将 jspm 与 system.js 一起使用来检索 angular 正常运行所需的所有 angular 包。 看到 system.js 的配置明确指出 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"
},

但没有检索到它们(查看网络选项卡)

Robwormald wrote a nicely detailed explanation that covers the issues people might have at this point and time trying to get angular alpha 27 to work with jspm and typescript https://gist.github.com/robwormald/429e01c6d802767441ec

是的,您正在寻找的东西是可行的,而且效果很好。看起来好像您拥有正确的依赖关系。我认为您只缺少以下内容,它需要位于顶级打字稿或 JavaScript 文件的开头。具体来说,这些需要先于第一行是loads Angular.

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

(另一个答案指向一个详细的,但场外的解释。)

如果此问题发生在 Angular 4.4+ 环境中,重新启动 ng serve 会有所帮助。