uni-app 引入etherjs后创建随机钱包报错

uni-app 引入etherjs后创建随机钱包报错

开发环境 版本号 项目创建方式
Windows win11 家庭版 HBuilderX
4.08

产品分类:uniapp/App

PC开发环境操作系统:Windows

手机系统:Android

手机系统版本号:Android 10

手机厂商:小米

手机机型:redmin9a

页面类型:vue

vue版本:vue2

打包方式:云端

示例代码:

import { ethers } from 'ethers';  

let firstWallet = ethers.Wallet.createRandom();  

19:23:44.667 Error: no secure random source avaialble (operation="crypto.getRandomValues", code=UNSUPPORTED_OPERATION, version=random/5.7.0)

操作步骤:

同上

预期结果:

成功创建

实际结果:

报错

bug描述:

在工程项目中引用ethers,打包运行到安卓app上时执行创建随机钱包,出现报错。
在网页浏览器上是好的,调试模式下也是好的,正式运行时不行


更多关于uni-app 引入etherjs后创建随机钱包报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 引入etherjs后创建随机钱包报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-app 引入 ethers.js 创建随机钱包时,可能会遇到一些报错。以下是可能的原因和解决方法:

1. 引入 ethers.js 的方式不正确

确保你正确引入了 ethers.js。在 uni-app 中,你可以通过 npm 安装 ethers.js,然后在代码中引入。

npm install ethers

然后在你的 uni-app 页面或组件中引入:

import { ethers } from 'ethers';

2. ethers.js 版本问题

不同版本的 ethers.js 可能有不同的 API 或行为。确保你使用的是最新版本,或者查看文档以确认你使用的 API 在当前版本中是否有效。

npm install ethers@latest

3. 创建随机钱包的代码问题

创建随机钱包的代码应该如下:

const wallet = ethers.Wallet.createRandom();
console.log('Address:', wallet.address);
console.log('Private Key:', wallet.privateKey);
console.log('Mnemonic:', wallet.mnemonic.phrase);

如果这段代码报错,可能是 ethers.js 的 API 发生了变化,或者你的环境不支持某些功能。

4. uni-app 环境限制

uni-app 是一个跨平台框架,可能在某些平台上对 ethers.js 的支持不完全。例如,在小程序或 H5 环境中,某些 Node.js 特有的 API 可能无法使用。

如果你在微信小程序中使用 ethers.js,可能会遇到 crypto 模块缺失的问题。你可以尝试使用 ethers.jsshims 来解决问题:

npm install @ethersproject/shims

然后在代码中引入:

import '@ethersproject/shims';
import { ethers } from 'ethers';

5. 调试报错信息

如果仍然报错,建议你查看具体的报错信息。根据报错信息来定位问题。常见的报错可能包括:

  • ReferenceError: crypto is not defined:缺少 crypto 模块,可以使用 @ethersproject/shims 来解决。
  • TypeError: Cannot read property 'createRandom' of undefinedethers 对象未正确引入,检查引入方式。
  • Error: Invalid mnemonic:生成的助记词无效,可能是 ethers.js 的某些功能在特定平台上不支持。

6. 使用 ethers.js 的轻量级版本

如果你只需要创建钱包,而不需要其他复杂的功能,可以考虑使用 ethers.js 的轻量级版本,或者直接使用 ethers.jsWallet 模块。

import { Wallet } from 'ethers';
const wallet = Wallet.createRandom();
console.log('Address:', wallet.address);
console.log('Private Key:', wallet.privateKey);
console.log('Mnemonic:', wallet.mnemonic.phrase);

7. 检查 uni-app 的构建配置

确保 uni-app 的构建配置没有限制 ethers.js 的功能。例如,检查 webpack 配置或 babel 配置,确保没有排除或忽略 ethers.js 相关的模块。

8. 使用 ethers.js 的浏览器版本

如果你在浏览器环境中使用 uni-app,可以尝试直接引入 ethers.js 的浏览器版本:

<script src="https://cdn.ethers.io/lib/ethers-5.2.umd.min.js"></script>

然后在代码中使用 ethers 对象:

const wallet = ethers.Wallet.createRandom();
console.log('Address:', wallet.address);
console.log('Private Key:', wallet.privateKey);
console.log('Mnemonic:', wallet.mnemonic.phrase);
回到顶部