JS 代码在节点上下文中 运行 时工作,但在控制台中未捕获 ReferenceError

JS code working when ran in a node context but Uncaught ReferenceError in console

我正在学习本教程:https://ethereum.org/en/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/

安装的 Npm 依赖项没有任何问题,这是我正在尝试的代码 运行:

const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(
    "https://eth-mainnet.alchemyapi.io/v2/1aZ1ZWH9087FqTnSSr7TI8ACFFgsIbcF"
)

async function main() {
    const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
    const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/v2/1aZ1ZWH9087FqTnSSr7TI8ACFFgsIbcF")
    const blockNumber = await web3.eth.getBlockNumber()
    console.log("My first exercise! The latest block number is " + blockNumber)
}
main()

在浏览器中加载它时,我收到未捕获的引用错误,但是当 运行使用 node 在命令行中运行脚本文件时,一切都按预期工作。

这是什么原因造成的? TIA :)

看完教程后 link 我相当确信您拥有的代码不适用于浏览器。您拥有的是 node.js 的代码。具体来说,浏览器不理解require().

如果您使用 Webpack 或 Browserify 之类的东西,就有可能使您编写的内容在浏览器上运行 - 这些是 javascript 编译器,可将 javascript 编译为 javascript。乍一看这可能看起来很奇怪,如果您正在编写 javascript 那么为什么要将其编译为 javascript?嗯,他们允许您做的一件事是使用您的浏览器可能不支持的一些功能,例如 require() 或新提议的语言功能。

但是,我不会走那条路。相反,我鼓励您阅读 alchemy-web3 文档,因为我认为这是 javascript 开发人员需要学习的一项重要技能。

如果您 google “alchemy-web3” 最热门的结果之一就是 github 页面:https://github.com/alchemyplatform/alchemy-web3. Go to the github page and have a quick read. Alternatively (and I do this more often than google) you can go to https://www.npmjs.com/ and search for "alchemy-web3". You will get this page: https://www.npmjs.com/package/@alch/alchemy-web3

它们都是同一个页面,但 npmjs 不会给出不是 javascript 库的结果。如果你浏览一下 alchemy-web3 页面,你会看到一些如何使用它的例子。这就是为什么我认为学习查找和阅读库文档是 javascript 程序员的一项重要技能 - 因为与大多数其他语言不同,大多数 javascript 库往往有很好的手写文档。

如果您阅读文档,您将了解如何在浏览器中使用它。您可以在脚本标签中包含 alchemy-web3 库,而不是执行 require()

<!DOCTYPE html>
<!-- Name this file something like Testing.html: -->

<!-- In HTML we do this instead of require() -->
<script src="https://cdn.jsdelivr.net/npm/@alch/alchemy-web3@latest/dist/alchemyWeb3.min.js"></script>

<script>
    // Now your script:
    const web3 = AlchemyWeb3.createAlchemyWeb3(
        "https://eth-mainnet.alchemyapi.io/v2/1aZ1ZWH9087FqTnSSr7TI8ACFFgsIbcF"
    )

    async function main() {
        const web3 = AlchemyWeb3.createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/v2/1aZ1ZWH9087FqTnSSr7TI8ACFFgsIbcF")
        const blockNumber = await web3.eth.getBlockNumber()
        console.log("My first exercise! The latest block number is " + blockNumber)

        // In the browser you can also output to the DOM:
        document.body.innerHTML += "My first exercise! The latest block number is " + blockNumber
    }
    main()
</script>

注意:如文档中所述,在浏览器中使用AlchemyWeb3.createAlchemyWeb3()