Web3js
未擷取的 ReferenceError:未定義要求
我對乙太坊開發相當陌生,我只是嘗試按照本教程進行操作,但我沒有連接到公共區塊鏈,而是嘗試通過已安裝的 MetaMask 連接到我的本地區塊鏈實例,並添加了本地鏈。但是,在“要求”部分,我在程式碼的第一行遇到了一個問題。下面是我的程式碼:
const { ethers } = require("ethers"); const provider = new ethers.providers.Web3Provider(window.ethereum) async function connectToMetamask(){ await provider.send("eth_requestAccounts", []); } connectToMetamask(); const signer = provider.getSigner(); const ERC20_ABI = [ "function getAll() public view returns(uint [] memory)", "function get(uint position) public view returns(uint)", "function add(uint id, string memory activityName, string memory authorName, string memory activityType) public", "function length() public view returns(uint)", ] const address = '0xf0c707dafa300d8bd19bbfed42b86469d50b022f'; const contractInstance = new ethers.Contract(address, ERC20_ABI, provider); const main = async () => { const name = await contractInstance.name(); console.log("name: " , name); } main();
我面臨的錯誤如下:
Uncaught ReferenceError: require is not defined at code.js:1:20
誰能幫我解決這個問題?我一步一步地按照本教程進行操作,但似乎對我不起作用..
注意:我已經編寫了自己的合約並將其部署到我的本地區塊鏈,這就是我獲得所有這些功能和地址的地方。
所以通過網際網路搜尋了一段時間後,我發現了問題所在以及如何解決它。
問題:
我試圖在我的瀏覽器中執行 Node JS 程式碼(這顯然不起作用,特別是如果您使用“require”關鍵字)。
解決方案:
為了解決這個問題,我不得不使用browserify。
browserify 所做的顯然是將您的 js 程式碼包裝到可以在瀏覽器中執行的新 js 文件中。用法可能有點混亂,尤其是對於 Windows 使用者,因為在 Windows 中安裝 browserify 後,CMD 中無法辨識關鍵字“browserify”。因此,這是我為使程式碼正常工作所做的步驟:
- 使用
npm install -g browserify
命令安裝browserify- 使用 CMD 導航到我的項目文件夾
- 執行此命令
node .\node_modules\browserify\bin\cmd.js code.js -o bundle.js
而不是browserify code.js -o bundle.js
因為…好吧 Windows。(注意“code.js”應該替換成你的js文件名)- 最後在我的 html 文件中包含了新生成的
bundle.js
文件而不是我的文件,我的程式碼最終執行良好。code.js``<script src="bundle.js"></script>
希望這能向我之後的其他人回答這個問題,他們不必花幾天時間就能找到這個簡單的答案。