53

我在使用 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 一起使用来检索 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"
},

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

4

3 回答 3

67

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

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

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

于 2015-09-29T01:49:08.340 回答
13

Robwormald写了一个非常详细的解释,涵盖了人们此时可能遇到的问题,试图让 angular alpha 27 与 jspm 和 typescript 一起工作https://gist.github.com/robwormald/429e01c6d802767441ec

于 2015-06-18T16:33:32.637 回答
4

如果这个问题出现在 Angular 4.4+ 环境中,重启ng serve.

于 2017-10-21T11:35:41.563 回答