Skip to content

Instantly share code, notes, and snippets.

@EnettyTech
Last active October 7, 2022 10:56
Show Gist options
  • Save EnettyTech/1617f339c779db36b6f1528dc68b5d96 to your computer and use it in GitHub Desktop.
Save EnettyTech/1617f339c779db36b6f1528dc68b5d96 to your computer and use it in GitHub Desktop.
Install web3 with react native

I got web3 1.2.1 up and running react native 0.60.4 and react 16.8.6

yarn add react-native-crypto react-native-randombytes

With react native 0.60.0 or up (auto links)

cd ios/
pod install
cd..

With react native lower

react-native link react-native-randombytes

Hack with rn-nodeify

 yarn add -dev rn-nodeify@latest
./node_modules/.bin/rn-nodeify --install
yarn add node-libs-browser base-64

Modify APPNAME/metro.config.js to read:

const extraNodeModules = require('node-libs-browser');

module.exports = {
  resolver: {
    extraNodeModules,
  },
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: false,
      },
    }),
  },
};

Modify shim.js to read:

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

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

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__
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')

Install web3 and implementation

npm i --S web3
import './shim'
@HamiltonWang
Copy link

Awesome

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment