【问题标题】:Angular2 + Jspm.io : reflect-metadata shim is required when using class decoratorsAngular2 + Jspm.io:使用类装饰器时需要反射元数据垫片
【发布时间】:2015-09-03 21:14:59
【问题描述】:

我在使用 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 时,问题就消失了,但下一个问题出现了,说列表在另一个角度文件中未定义。

有关 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"
},

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

【问题讨论】:

    标签: angular typescript1.5 jspm systemjs


    【解决方案1】:

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

    【讨论】:

    • UPD 15-05-2016,Angular2-rc1 在安装 reflect-metadata 以解决此问题后,现在我从路由器收到错误
    【解决方案2】:

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

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

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

    【讨论】:

    • 别忘了加jspm install reflect-metadata zone.js
    • 虽然这可行,但如果您使用 bundle-sfx 捆绑源代码,它可以工作,但会引发 maximum call stack size exceeded 错误。我认为,由于 angular2 还包含 reflect-metadata 和 zone.js 作为依赖项,它会在某处造成循环依赖。
    • @EvanPlaice 因为我认为 alpha 46 / 45 他们将 zone.js 与 angularjs 捆绑在一起。我认为您仍然需要 es6-shim 并反映元数据。
    • import 'core-js/es7/reflect'; 也会完成这项工作
    • 我在尝试访问静态方法时遇到了这个问题。对我来说import 'reflect-metadata'; 有效,但如果我也输入import 'zone.js';,它会回到同样的错误。
    【解决方案3】:

    如果这个问题出现在 Angular 4.4+ 环境中,重启ng serve会有帮助。

    【讨论】:

      猜你喜欢
      • 2016-09-27
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2016-10-29
      相关资源
      最近更新 更多