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

时间:2015-06-18 09:42:06

标签: angular typescript1.5 jspm systemjs

我在使用Angular2和SystemJS运行以下版本的JSPM时遇到以下问题(版本: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时,问题就消失了但是下一个问题出现了,说明列表在另一个角度文件中是未定义的。

从system.js和typescript / jspm.io中查看配置文件(src代码)下面的bitbucket src

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

我想知道的是,如果它现在甚至可以将jspm与system.js一起使用来检索角度正常运行所需的所有角度包。 看作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"
},

但是没有检索到它们(查看网络标签)

3 个答案:

答案 0 :(得分:66)

是的,你正在寻找的东西是可能的并且运作良好。看起来好像你有依赖关系。我认为您只缺少以下内容,这些内容需要位于顶级打字稿或JavaScript文件的开头。具体来说,这些需要在第一行之前加载Angular。

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

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

答案 1 :(得分:13)

Robwormald写了一个非常详细的解释,涵盖了人们此时可能遇到的问题,并尝试使用角度alpha 27来处理jspm和typescript https://gist.github.com/robwormald/429e01c6d802767441ec

答案 2 :(得分:4)

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