Ошибка компиляции шаблона. Выражения функций не поддерживаются в декораторах - PullRequest
0 голосов
/ 26 марта 2019

Я реализовал onesignal в своем приложении ionic v4, В отладочных тестах все идеально, но при запуске на android и ios я получаю ошибки и останавливаю компиляцию.

ionic cordova build android --prod --release

ionic cordova build ios --prod

В обоих случаях терминал показывает одинаковую ошибку

ERROR in app/app.module.ts(66,5): Error during template compile of 'AppModule'
Function expressions are not supported in decorators in 'OneSignal'
'OneSignal' references 'ɵ2'
'ɵ2' contains the error at ../@ionic-native/onesignal/ngx/index.js.ts(64,32)
Consider changing the function expression into an exported function.

Это код функции в @ ionic-native / onesignal / ngx / index.js.ts

var OneSignal = /** @class */ (function (_super) {
    __extends(OneSignal, _super);
    function OneSignal() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        /**
         * constants to use in inFocusDisplaying()
         * @hidden
         */
        _this.OSInFocusDisplayOption = {
            None: 0,
            InAppAlert: 1,
            Notification: 2
        };
        return _this;
    }
    OneSignal.prototype.startInit = function (appId, googleProjectNumber) { return cordova(this, "startInit", { "sync": true }, arguments); };
    OneSignal.prototype.handleNotificationReceived = function () { return cordova(this, "handleNotificationReceived", { "observable": true }, arguments); };
    OneSignal.prototype.handleNotificationOpened = function () { return cordova(this, "handleNotificationOpened", { "observable": true }, arguments); };
    OneSignal.prototype.iOSSettings = function (settings) { return cordova(this, "iOSSettings", { "sync": true, "platforms": ["iOS"] }, arguments); };
    OneSignal.prototype.endInit = function () { return cordova(this, "endInit", { "sync": true }, arguments); };
    OneSignal.prototype.promptForPushNotificationsWithUserResponse = function () { return cordova(this, "promptForPushNotificationsWithUserResponse", { "platforms": ["iOS"] }, arguments); };
    OneSignal.prototype.getTags = function () { return cordova(this, "getTags", {}, arguments); };
    OneSignal.prototype.getIds = function () { return cordova(this, "getIds", {}, arguments); };
    OneSignal.prototype.sendTag = function (key, value) { return cordova(this, "sendTag", { "sync": true }, arguments); };
    OneSignal.prototype.sendTags = function (json) { return cordova(this, "sendTags", { "sync": true }, arguments); };
    OneSignal.prototype.deleteTag = function (key) { return cordova(this, "deleteTag", { "sync": true }, arguments); };
    OneSignal.prototype.deleteTags = function (keys) { return cordova(this, "deleteTags", { "sync": true }, arguments); };
    OneSignal.prototype.registerForPushNotifications = function () { return cordova(this, "registerForPushNotifications", { "sync": true }, arguments); };
    OneSignal.prototype.enableVibrate = function (enable) { return cordova(this, "enableVibrate", { "sync": true }, arguments); };
    OneSignal.prototype.enableSound = function (enable) { return cordova(this, "enableSound", { "sync": true }, arguments); };
    OneSignal.prototype.inFocusDisplaying = function (displayOption) { return cordova(this, "inFocusDisplaying", { "sync": true }, arguments); };
    OneSignal.prototype.setSubscription = function (enable) { return cordova(this, "setSubscription", { "sync": true }, arguments); };
    OneSignal.prototype.getPermissionSubscriptionState = function () { return cordova(this, "getPermissionSubscriptionState", {}, arguments); };
    OneSignal.prototype.postNotification = function (notificationObj) { return cordova(this, "postNotification", {}, arguments); };
    OneSignal.prototype.cancelNotification = function (notificationId) { return cordova(this, "cancelNotification", { "sync": true }, arguments); };
    OneSignal.prototype.promptLocation = function () { return cordova(this, "promptLocation", { "sync": true }, arguments); };
    OneSignal.prototype.syncHashedEmail = function (email) { return cordova(this, "syncHashedEmail", { "sync": true }, arguments); };
    OneSignal.prototype.setLogLevel = function (logLevel) { return cordova(this, "setLogLevel", { "sync": true }, arguments); };
    OneSignal.prototype.setLocationShared = function (shared) { return cordova(this, "setLocationShared", { "sync": true }, arguments); };
    OneSignal.prototype.addPermissionObserver = function () { return cordova(this, "addPermissionObserver", { "observable": true }, arguments); };
    OneSignal.prototype.addSubscriptionObserver = function () { return cordova(this, "addSubscriptionObserver", { "observable": true }, arguments); };
    OneSignal.prototype.setEmail = function (email, emailAuthToken) { return cordova(this, "setEmail", {}, arguments); };
    OneSignal.prototype.logoutEmail = function () { return cordova(this, "logoutEmail", {}, arguments); };
    OneSignal.prototype.addEmailSubscriptionObserver = function () { return cordova(this, "addEmailSubscriptionObserver", { "observable": true }, arguments); };
    OneSignal.prototype.clearOneSignalNotifications = function () { return cordova(this, "clearOneSignalNotifications", { "sync": true }, arguments); };
    OneSignal.prototype.setRequiresUserPrivacyConsent = function (required) { return cordova(this, "setRequiresUserPrivacyConsent", {}, arguments); };
    OneSignal.prototype.provideUserConsent = function (granted) { return cordova(this, "provideUserConsent", {}, arguments); };
    OneSignal.prototype.userProvidedPrivacyConsent = function (callback) { return cordova(this, "userProvidedPrivacyConsent", {}, arguments); };
    OneSignal.pluginName = "OneSignal";
    OneSignal.plugin = "onesignal-cordova-plugin";
    OneSignal.pluginRef = "plugins.OneSignal";
    OneSignal.repo = "https://github.com/OneSignal/OneSignal-Cordova-SDK";
    OneSignal.platforms = ["Amazon Fire OS", "Android", "iOS", "Windows"];
    OneSignal = __decorate([
        Injectable()
    ], OneSignal);
    return OneSignal;
}(IonicNativePlugin));

Это моя среда

Ionic:

ionic (Ionic CLI) : 4.10.3 (/usr/local/lib/node_modules/ionic)

Ionic Framework : @ionic/angular 4.0.0
@angular-devkit/build-angular : 0.12.3
@angular-devkit/schematics : 7.2.3
@angular/cli : 7.2.3
@ionic/angular-toolkit : 1.2.2
Capacitor:
capacitor (Capacitor CLI) : 1.0.0-beta.17
@capacitor/core : 1.0.0-beta.11
Cordova:
cordova (Cordova CLI) : 8.1.2 (cordova-lib@8.1.1)
Cordova Platforms : not available
Cordova Plugins : not available
System:
ios-deploy : 1.9.4
NodeJS : v8.11.3 (/usr/local/bin/node)
npm : 6.8.0
OS : macOS High Sierra
Xcode : Xcode 10.1 Build version 10B61

1 Ответ

0 голосов
/ 27 марта 2019

Я отправляю ответ, потому что я исправил ошибку. Флаг --prod минимизирует и оптимизирует проект, включая AoT (опережающее время), которое повышает производительность. Именно AoT вызывает конфликт с плагином OneSignal. Решение - сделать компиляцию без --prod, только с флагом --release. Я выясняю, есть ли возможность скомпилировать с --prod, исключая AoT, но пока, по крайней мере, это хорошее решение, и, с другой стороны, мое приложение работает очень быстро.

...