使用Apache Thrift在Nativescript + Angular中'无法读取未定义的'浏览器属性''

Ser*_*sky 3 thrift babel webpack nativescript angular

我试图在我的Angular&Nativescript项目中使用Apache Thrift,但是通过'tns Preview --bundle'或任何其他tns命令,我得到了

TypeError: Cannot read property 'browser' of undefined
File: "<unknown>, line: 1, column: 265
Run Code Online (Sandbox Code Playgroud)

Apache Thrift版本0.11.0 / 1.0.0dev,Angular版本7.1.0,Nativescript版本5.1.0

在platform / 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)
Run Code Online (Sandbox Code Playgroud)

当我期望类似之类的东西时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() {...};
}
Run Code Online (Sandbox Code Playgroud)

没有提供任何问题ng serve。我希望这里是解决此错误并使其节俭与nativescript兼容的任何方法,或希望将thrift与nativescript结合使用的任何其他方法。

Ser*_*sky 5

问题出在Nativescript提供的默认webpack.config.js中。在:

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

您需要删除line "process": undefined