Невозможно запустить приложение {N} с AOT, Reflect.getMetadata не является функцией - PullRequest
0 голосов
/ 05 апреля 2019

Попытка заставить мое приложение nativescript работать с включенным aot. Используется последняя версия nativescript, и она прекрасно собирается. При запуске приложения появляется ошибка Reflect.getMetadata is not a function и приложение не работает. Это происходит при использовании зависимостей, основанных на Reflect.getMetadata, например: https://github.com/ghidoz/angular2-jsonapi

Демонстрационный проект с ошибками при использовании aot: https://github.com/annervisser/nativescript-aot-error

Приложение отлично работает с использованием JIT и прерывается только при использовании флага --env.aot. Webpack всегда включен, так как это угловой проект (всегда запускается с флагом --bundle)

Полная трассировка стека:

System.err: TypeError: Reflect.getMetadata is not a function
System.err: File: "<unknown>, line: 1, column: 265
System.err: 
System.err: StackTrace: 
System.err:     Frame: function:'saveAnnotations', file:'file:///data/data/nl.persistence.stubs/files/app/vendor.js', line: 78279, column: 36
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/vendor.js', line: 78322, column: 13
System.err:     Frame: function:'module.exports../app/shared/models/user.model.ts.__decorate', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 2287, column: 110
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 2302, column: 5
System.err:     Frame: function:'./app/shared/models/user.model.ts', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 2348, column: 2
System.err:     Frame: function:'__webpack_require__', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 752, column: 30
System.err:     Frame: function:'fn', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 122, column: 20
System.err:     Frame: function:'./app/shared/auth/auth.service.ts', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 1355, column: 76
System.err:     Frame: function:'__webpack_require__', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 752, column: 30
System.err:     Frame: function:'fn', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 122, column: 20
System.err:     Frame: function:'./app/shared/auth/auth-interceptor.service.ts', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 1280, column: 71
System.err:     Frame: function:'__webpack_require__', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 752, column: 30
System.err:     Frame: function:'fn', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 122, column: 20
System.err:     Frame: function:'./app/app.module.ngfactory.js', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 1041, column: 96
System.err:     Frame: function:'__webpack_require__', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 752, column: 30
System.err:     Frame: function:'fn', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 122, column: 20
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 2387, column: 83
System.err:     Frame: function:'./main.ts', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 2465, column: 30
System.err:     Frame: function:'__webpack_require__', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 752, column: 30
System.err:     Frame: function:'checkDeferredModules', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 45, column: 23
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 828, column: 18
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/bundle.js', line: 831, column: 10
System.err:     Frame: function:'require', file:'', line: 1, column: 266
System.err:     Frame: function:'', file:'file:///data/data/nl.persistence.stubs/files/app/starter.js', line: 2, column: 1
System.err:     Frame: function:'require', file:'', line: 1, column: 266
System.err: 
System.err:     at com.tns.Runtime.runModule(Native Method)
System.err:     at com.tns.Runtime.runModule(Runtime.java:624)
System.err:     at com.tns.Runtime.run(Runtime.java:616)
System.err:     at com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err:     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err:     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)

Я пытался импортировать метаданные отражения в разных местах, включая polyfills.ts, main.tns.ts, app.module.tns.ts Я также попытался включить его в мой webpack / tnsconfig и изменить цель на es2015 или es6. Ничто из этого не имеет значения.

Поиск этой ошибки приводит к большому количеству общей информации об углах, предлагая добавить импорт для reflect-metadata к polyfills.ts. Это не помогает.

1 Ответ

0 голосов
/ 08 апреля 2019

Добавьте оператор импорта для пакета reflect-metadata в верхней части модуля приложения (в основном перед обращением к JsonApiDatastoreConfig decorator.

import "reflect-metadata";
...