realm / realm-js

Realm is a mobile database: an alternative to SQLite & key-value stores
https://realm.io
Apache License 2.0
5.74k stars 566 forks source link

Undefined is not a constructor (evaluating 'new XMLHttpRequest()') when hack to allow react-native (rn-nodeify) #2482

Closed EnettyTech closed 3 years ago

EnettyTech commented 5 years ago

Undefined is not a constructor (evaluating 'new XMLHttpRequest()') when hack to allow react-native (rn-nodeify)

Actual Results

Install realm and web3 follow install web3. After import 'shim' run ios crash.

Steps to Reproduce

  1. Install web3 follow install web3.
  2. Install realm
npm install realm --save
cd ios
pod instal

Code Sample

App.js

import React, { Component } from 'react'
import { Text, View } from 'react-native'
import './shim';
import realm from 'realm';
import web3 from 'web3'
export default class App extends Component {
  render() {
    return (
      <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
        <Text> textInComponent </Text>
      </View>
    )
  }
}

shim.js

import { decode, encode } from 'base-64'

if (!global.btoa) global.btoa = encode
if (!global.atob) global.atob = decode

// Fix for https://github.com/facebook/react-native/issues/5667
if (typeof global.self === 'undefined') {
  global.self = global;
}

if (typeof __dirname === 'undefined') global.__dirname = '/'
if (typeof __filename === 'undefined') global.__filename = ''
if (typeof process === 'undefined') {
  global.process = require('process')
} else {
  const bProcess = require('process')
  for (var p in bProcess) {
    if (!(p in process)) {
      process[p] = bProcess[p]
    }
  }
}

process.browser = false
if (typeof Buffer === 'undefined') global.Buffer = require('buffer').Buffer

// if (typeof location === 'undefined') global.location = { port: 80, protocol: 'https:' }
const isDev = typeof __DEV__ === 'boolean' && __DEV__

Object.assign(process.env, { 'NODE_ENV': isDev ? 'development' : 'production' });

if (typeof localStorage !== 'undefined') {
  localStorage.debug = isDev ? '*' : ''
}

// If using the crypto shim, uncomment the following line to ensure
// crypto is loaded first, so it can populate global.crypto
require('crypto')

Version of Realm and Tooling

kneth commented 5 years ago

@bachlongkocanh Have you seen https://www.edureka.co/community/24924/typeerror-xmlhttprequest-function-using-meteor-server-side?

Moreover, do you see the error if web3 isn't included?

RealmBot commented 3 years ago

➤ Franck Franck commented:

Cannot reproduce without user feedback.