关于creator引入 web3包的问题

官方教程地址[外部模块案例:web3使用][外部模块使用案例 · Cocos Creator]
我按照官方的教程,引入web3包,编译没报错,但是运行后报错:
我的代码:
import web3 from ‘web3/dist/web3.min.js’;
const ccWeb3 = new web3.default().version;
cc.log(‘get web3:’, ccWeb3);

报错:

不知道是哪里没配置好,希望大佬指点一下

参考:React App

多谢,我试试

https://cocos-creator.github.io/packages/web3
按照

这样的步骤配置,还是不行。报同样的错误:
这是我的tsconfig:

这是我的package:
image

我按照这个方法引入,报不同的错

最后web3有引入成功么

你们用的编辑器到底是 2.x 还是 3.x… caniuse 那个是面向 3.x 的

大佬,2.x和3.x的用户都有。所以2个都需要解决方案

React App
里的步骤操作,在 3.x 你那无法引用吗?

你好,我这边使用的是2.3.3版本

首先抱歉,项目有点忙,没及时回复解决方案。
我是2.4.2
引入的方法是这样:
1、把最新的web3.min.js弄到手:(可以GitHub,npm install web3,yarn……)
2、把web3.min.js放入工程;
3、const Web3 = require(‘web3.min’)导入到使用的地方
4、使用例子:

  this.web3 = new Web3();
  let w = window as any;                
  if (w.ethereum) {
                this.web3ProviderName = "metamask";
                this.web3Provider = w.ethereum;
                this.web3.setProvider(this.web3Provider);
                w.ethereum
                    .enable()
                    .then(async (accounts: any) => {
                        console.log('accounts', accounts);
                        this.web3.eth.getAccounts((error: Error, accounts: string[]) => {
            if (accounts.length > 0) {
                let currentAccount = accounts[0].toLowerCase();
                console.log('getAccounts', accounts[0]);
             //个人的业务逻辑
      
                // this.web3.eth.personal.sign("Hello Dapp", accounts,(err, res) => {
                //     console.log("签名后的数据:",res)
                //     
                // })
                resolve({ accounts: accounts });
            } else {
                reject({ code: "", message: "You must enable and login into your TomoWallet or MetaMask accounts!" });
            }
        });
                        
                        resolve(result);
                    })
                    
            } else if (w.web3) {
                this.web3ProviderName = "tomowallet";
                this.web3Provider = w.web3.currentProvider;
                this.web3.setProvider(this.web3Provider);

                let result = await Web3Controller.instance._initAccount();
                Web3Controller.instance.initContract();
                resolve(result);
            }
2赞

你好,你这个链接失效了,是换位置了么?

https://shrinktofit.github.io/can-i-use-npm-in-cocos-creator/
试试这个

1赞

谢谢,我跟着做下来了,最后一步“并在 tsconfig.json 中引用该 .d.ts 文件。”不是很懂该怎么引用,不知道是不是这个原因,导致报下面的错误。
我用的是creator 3.5.2

我的意思是我尝试了用inclue和files的方式在tsconfig.json里引用我写的test.d.ts,但两种方式写了之后,一是没体现出作用,报错还是这个,二是写完之后出现报错说cc找不到了。
我查了下资料,说“ 如果 "files""include" 都没有被指定,编译器默认包含当前目录和子目录下所有的TypeScript文件( .ts , .d.ts.tsx )”,那好像意思是不需要主动写,默认这个test.d.ts就会被引用?
这里有点卡住了,希望能获得些指点,谢谢。

================================
最新情况:
我现在Web3.version能取到值了,但有点奇怪,有下面两种情况

  1. 建了一个如下的cocos默认模板的ts,写Web3.default.version,报错 TypeError: Cannot read properties of undefined (reading ‘version’);突发奇想把default给删了,直接写Web3.version,顶着version下的报错提示波浪线运行,竟然取到值了,版本是web3 version 是 1.7.4。
    image
  2. 建了一个只有 export{} 的 test.ts文件,前面说的Web3.version的写法下的报错提示波浪线竟然没了,并且也取到值了。这是什么鬼?难道是因为我的.d.ts的名字是test.d.ts的原因?

另外,是只有在这个页面里列出的npm包才能用么?那样的话。。。React不能用吗?


这边收集的