'Невозможно прочитать свойство' browser 'из undefined' в Nativescript + Angular с использованием Apache thrift - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь использовать Apache Thrift с моим проектом Angular & Nativescript, но с помощью команды 'tns preview --bundle' или любой другой команды tns я получаю

TypeError: Cannot read property 'browser' of undefined
File: "<unknown>, line: 1, column: 265

Apache Thrift v. 0.11.0 / 1.0.0dev, Angular v. 7.1.0, Nativescript v. 5.1.0

На платформах / android / app / src / main / assets / app / vendor.js я вижу:

/* istanbul ignore next */
if (undefined.browser) {
    defaultEncoding = 'utf-8'
} else {
    var pVersionMajor = parseInt(undefined.version.split('.')[0].slice(1), 10)

Когда я ожидал что-то вроде global.process.browser, чем я могу найти в другом мире vendor.js.И в другом мире я вижу что-то вроде undefined.nextTick(...) и т. Д. Я знаю, что это какая-то проблема с Вавилоном, но я не знаю, как ее исправить.

Я использую сценарий thrift --gen js:node, чтобы сгенерировать свою экономиюфайлы (это не имеет смысла по ошибке).Без них все работает круто, но затем я пытаюсь выполнить любой созданный Thrift файл / любой модуль из Thrift, я получаю исключение выше.my_component.ts

import { Component, OnInit } from '@angular/core';
import { TJSONProtocol } from 'thrift'; // or anything else 

@Component({...});

export class MyComponent implements OnInit {
    ngOnInit () {
        // console.log(TJSONProtocol); // Uncomment this string to get an exception.
    }
    constructor() {...};
}

Есть проблемы с ng serve.Я надеюсь, что здесь есть какой-нибудь способ исправить эту ошибку и сделать Thrift совместимым с nativescript или любой другой способ использовать Thrift с nativescript.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Проблема была в файле webpack.config.js по умолчанию, предоставленном Nativescript.По адресу:

plugins: [
        // Define useful constants like TNS_WEBPACK
        new webpack.DefinePlugin({
            "global.TNS_WEBPACK": "true",
            "process": undefined,
        })

Вам необходимо удалить строку "process": undefined.

0 голосов
/ 27 декабря 2018

Когда приложение использует данные браузера (документ, окно и т. Д.), Вам необходимо убедиться, что к этим данным обращаются только тогда, когда приложение работает в самом браузере, что не имеет место в nodejs.

Для этого поместите фрагмент кода, который необходимо использовать, в чек, например:

if (typeof window !== 'undefined') {
    // here runs your code...
    console.log(TJSONProtocol);
}

См .: https://angular.io/guide/universal#working-around-the-browser-apis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...