js vm报错_polkadot-js在React Native中的使用

在React Native环境中,由于对Node.js支持不完全,使用polkadot-js会遇到报错。解决方法包括:安装polkadot-js相关依赖和Node core modules,修改package.json配置文件,以及在启动脚本中增加内存限制选项以防止JavaScript堆内存溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于react native对nodejs的支持并不是很完善,当你

react-native init project
cd project 
yarn add @polkadot/api

之后用以下代码测试

import {WsProvider,ApiPromise} from '@polkadot/api'

const App = () => {
  const usingHermes = typeof HermesInternal === 'object' && HermesInternal !== null;
  getData();
  return (
    <>...省略
)}

async function getData(){
  const WS_PROVIDER = 'wss://dev-node.substrate.dev:9944'
  const wsProvider = new WsProvider(WS_PROVIDER)
  const api = await ApiPromise.create({provider: wsProvider})
  console.log(api.genesisHash.toHex())
}

会发现有各种报错

Loading dependency graph, done.
error: bundling failed: Error: Unable to resolve module `util` from `node_modules/@polkadot/util/polyfill/textDecoder.js`: util could not be found within the project.

解决方案

来源 https://github.com/hashpire/polkadotjsWithReactNative

1.安装polkadot-js相关依赖

yarn add @polkadot/api @polkadot/keyring

2.安装Node core modules for React Native

yarn add node-libs-react-native vm-browserify bs58

3.编辑项目根目录下的metro.config.js

const nodeLibs = require("node-libs-react-native");
nodeLibs.bs58 = require.resolve("bs58");
nodeLibs.vm = require.resolve("vm-browserify");

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

4. 编辑项目根目录下的index.js, 在引入App.js前添加

import 'node-libs-react-native/globals';

5.使用 react-native-randombytes

yarn add react-native-randombytes
cd ios
pod install
cd ..

6. 编辑package.jsonscript,加上NODE_OPTIONS=--max_old_space_size=8192,避免出现Allocation failed - JavaScript heap out of memory报错

"scripts": {
 "android": "NODE_OPTIONS=--max_old_space_size=8192 react-native run-android",
 "ios": "NODE_OPTIONS=--max_old_space_size=8192 react-native run-ios",
 "start": "NODE_OPTIONS=--max_old_space_size=8192 react-native start",
 "test": "jest"
  },

然后测试使用就OK了。

第一次运行yarn android 的时候可能加载js会卡在98%的位置,等一会就好了。

96f8a3489b8acb1731d1ca6fd07badd5.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值