Web3js

未擷取的 ReferenceError:未定義要求

  • March 28, 2022

我對乙太坊開發相當陌生,我只是嘗試按照本教程進行操作,但我沒有連接到公共區塊鏈,而是嘗試通過已安裝的 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>

希望這能向我之後的其他人回答這個問題,他們不必花幾天時間就能找到這個簡單的答案。

引用自:https://ethereum.stackexchange.com/questions/124367