Angular2 + Jspm.io: при использовании декораторов классов требуется оболочка отражающих метаданных

У меня возникла следующая проблема с запуском следующих версий JSPM с Angular2 и SystemJS (версии: [email protected] с [email protected] и [email protected]). скомпилировано (без ошибок), в браузере появляется следующая ошибка:

/jspm_packages/npm/[email protected]/src/util/decorators.js:70 Uncaught reflect-metadata shim is required when using class decorators

Теперь, когда я вручную включаю файл Reflect.js: \ jspm_packages \ npm \ [email protected] \ Reflect.js, эта проблема исчезает, но появляется следующая проблема: список не определен в другом угловом файле.

См. Битбакет src ниже для файлов конфигурации (код src) как из system.js, так и из typescript / jspm.io

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

Мне интересно, возможно ли в настоящее время использовать jspm вместе с system.js для получения всех пакетов angular, которые необходимы для нормальной работы angular. Видя, как конфигурация для system.js четко заявляет, что angular зависит от нее:

"npm:[email protected]": {
  "fs": "github:jspm/[email protected]",
  "path": "github:jspm/[email protected]",
  "process": "github:jspm/[email protected]",
  "reflect-metadata": "npm:[email protected]",
  "rx": "npm:[email protected]",
  "url": "github:jspm/[email protected]",
  "zone.js": "npm:[email protected]"
},

Но они не извлекаются (глядя на вкладку сети)


person N.Schipper    schedule 18.06.2015    source источник


Ответы (3)


Да, то, что вы ищете, возможно и прекрасно работает. Похоже, что у вас есть правильные зависимости. Я думаю, вам не хватает только следующего, которое должно быть в начале вашего машинописного текста верхнего уровня или файла JavaScript. В частности, они должны быть перед первой строкой, которая загружает Angular.

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

(Другой ответ указывает на подробное, но стороннее объяснение.)

person Kyle Cordes    schedule 29.09.2015
comment
Не забудьте добавить jspm install reflect-metadata zone.js. - person Evan Plaice; 27.10.2015
comment
Хотя это работает, если вы объедините источник с помощью bundle-sfx, он будет работать, но выдаст ошибку maximum call stack size exceeded. Я думаю, поскольку angular2 также включает в себя отражающие метаданные и zone.js в качестве зависимостей, это вызывает где-то циклическую зависимость. - person Evan Plaice; 27.10.2015
comment
@EvanPlaice Поскольку я думаю, что альфа 46/45, они связывают zone.js с angularjs. Думаю, вам еще нужна es6-shim и отражение метаданных. - person N.Schipper; 22.11.2015
comment
import 'core-js/es7/reflect'; тоже выполнит свою работу - person Alex Klaus; 23.11.2016
comment
Я столкнулся с этой проблемой, пытаясь получить доступ к статическим методам. для меня import 'reflect-metadata'; работал, но если я также поставлю import 'zone.js';, он вернется к той же ошибке. - person ishandutta2007; 25.06.2017
comment
где именно разместить import «Reflection-metadata»;? @ ishandutta2007 или import «core-js / es7 / reflection»; @ Алекс Клаус? - person DS_web_developer; 08.08.2017
comment
@DS_web_developer, вы помещаете его в точку входа (модуль загружается при запуске). Например. посмотрите как это было сделано в AngularClass/angular-starter. Если вас интересует разница между двумя вариантами, она описана здесь. - person Alex Klaus; 08.08.2017
comment
@AlexKlaus: а разве не все дело в том, что серверу не нужны полифилы? - person DS_web_developer; 08.08.2017
comment
@DS_web_developer, необходимость в полифилле исходит из среды, в которой вы запускаете JS-код. В некоторых случаях он может вам не понадобиться. - person Alex Klaus; 09.08.2017

Робвормальд написал хорошо подробное объяснение, в котором рассматриваются проблемы, которые могут возникнуть у людей в данный момент и в то время, пытаясь получить угловую альфа-версию. 27 для работы с jspm и машинописным текстом https://gist.github.com/robwormald/429e01c6d802767441ec

person N.Schipper    schedule 18.06.2015
comment
UPD 15-05-2016, для Angular2-rc1 после установки отражать метаданные, чтобы исправить эту проблему, теперь я получаю ошибки от маршрутизатора - person shershen; 15.05.2016

Если эта проблема возникает в среде Angular 4.4+, может помочь перезапуск ng serve.

person creep3007    schedule 21.10.2017