2、开发环境准备:Node.js、Yarn、Hardhat、MetaMask钱包配置、Infura/Alchemy节点服务申请

好,咱们正式开始动手了。这一章我带你搭好开发环境。说实话,很多新手在NFT开发上栽跟头,十有八九是环境没配好。我当年第一次跑Hardhat示例项目时,光Node版本冲突就折腾了俩小时……嗯,咱们别走弯路,一步到位。

2.1 Node.js 安装与版本管理

Node.js是整个前端DApp的运行时基础。我个人习惯用 nvm(Node Version Manager)来管理版本,因为不同项目可能依赖不同的Node版本,你总不想每次升级都卸载重装吧?

推荐版本:Node.js 18.x LTS 或 20.x LTS。Hardhat 对 16.x 以上都支持,但 18/20 最稳。

安装步骤(以macOS/Linux为例):

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 重新打开终端后,安装 Node 18
nvm install 18

# 使用该版本
nvm use 18

# 验证
node -v   # 应该输出 v18.x.x
npm -v    # 应该输出 9.x.x 或更高

避坑指南:Windows用户建议用 nvm-windows,或者直接去官网下载LTS安装包。我曾经在Windows上用Chocolatey装Node,结果路径冲突导致Hardhat死活跑不起来——后来老老实实手动装了。

2.2 Yarn 包管理器

为什么用Yarn而不是npm?说白了,Yarn的依赖解析更可靠,锁文件更稳定,而且安装速度快。在区块链项目里,依赖版本一致性特别重要——你不想因为队友的node_modules不同导致合约编译结果不一样吧?

# 安装 Yarn(全局)
npm install -g yarn

# 验证
yarn --version   # 输出 1.22.x 或更高

我个人建议用 Yarn v1(Classic),而不是Yarn Berry。虽然Berry很新,但很多Hardhat插件对它的支持还不够成熟。我在一个项目里试过Berry,结果插件报错,回退到v1就一切正常了。

2.3 Hardhat 框架安装

Hardhat是目前以太坊开发最主流的框架。它集成了编译、测试、部署、调试等功能。你想想看,一个工具搞定所有,多省心。

# 创建项目目录
mkdir nft-dapp && cd nft-dapp

# 初始化项目
yarn init -y

# 安装 Hardhat
yarn add --dev hardhat

# 初始化 Hardhat 项目
npx hardhat init

初始化时,选择「Create a JavaScript project」或「Create a TypeScript project」。我个人推荐TypeScript,虽然多写几个类型定义,但后期维护起来真的省心。我在一个大型NFT市场项目里,就因为类型错误排查了整整一天……从那以后,所有新项目我都用TS。

安装完成后,你的项目结构应该是这样的:

nft-dapp/
├── contracts/        # 智能合约存放目录
├── scripts/          # 部署脚本
├── test/             # 测试文件
├── hardhat.config.js # Hardhat 配置文件
├── package.json
└── yarn.lock

2.4 MetaMask 钱包配置

MetaMask是前端DApp与区块链交互的桥梁。说白了,用户通过MetaMask签名交易,你的DApp才能调用智能合约。

安装与基本配置:

  1. 去Chrome应用商店搜索「MetaMask」并安装
  2. 创建钱包(记得安全保存助记词!)
  3. 添加以太坊测试网络(比如 Sepolia)

添加Sepolia测试网的步骤:

网络名称: Sepolia Testnet
RPC URL: https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID
链ID: 11155111
货币符号: SepoliaETH
区块浏览器: https://sepolia.etherscan.io

重要提醒:千万不要在MetaMask里导入你主网有资产的私钥!测试网用单独的钱包。我曾经见过有人把测试网私钥截图发到群里,结果主网钱包被清空……血的教训。

2.5 Infura / Alchemy 节点服务申请

你的DApp需要连接以太坊节点才能读写链上数据。自己跑节点?太折腾了。Infura和Alchemy就是帮你托管节点的服务商。

为什么需要它们?你想想看,如果每个用户都自己跑节点,那DApp的门槛得多高?节点服务商帮你解决了这个问题,你只需要一个API Key就能接入。

Infura 申请步骤

  1. 访问 infura.io,注册账号
  2. 创建新项目,选择「Ethereum」
  3. 复制你的 Project ID(就是API Key)
  4. 选择网络:Sepolia(测试网)

Alchemy 申请步骤

  1. 访问 alchemy.com,注册账号
  2. 创建 App,选择「Ethereum」和「Sepolia」
  3. 复制 HTTP Endpoint(格式类似 https://eth-sepolia.g.alchemy.com/v2/你的API_KEY

我的建议:两个都申请,互为备用。Alchemy的免费额度更慷慨(每月3亿次请求),Infura的稳定性更好。我在生产环境里通常两个都配,一个主用,一个fallback。

2.6 配置 Hardhat 连接测试网

现在我们把Hardhat和节点服务连起来。编辑 hardhat.config.js

require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.20",
  networks: {
    sepolia: {
      url: "https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID",
      // 或者用 Alchemy
      // url: "https://eth-sepolia.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY",
      accounts: ["你的钱包私钥(不要提交到Git!)"]
    }
  }
};

安全警告:永远不要把私钥硬编码在代码里!用环境变量。创建一个 .env 文件:

SEPOLIA_PRIVATE_KEY=你的私钥
INFURA_PROJECT_ID=你的Infura ID

然后在 hardhat.config.js 里用 dotenv 读取。记得把 .env 加到 .gitignore 里。

2.7 验证环境是否就绪

跑一个简单的测试,确保所有配置都正确:

# 编译合约(Hardhat自带示例合约)
npx hardhat compile

# 运行测试
npx hardhat test

# 检查网络连接(用你的Infura/Alchemy节点)
npx hardhat console --network sepolia
> await ethers.provider.getBlockNumber()
// 应该返回一个区块号,比如 5123456

如果看到区块号,恭喜你——环境配好了!

常见问题排查:

  • 编译报错:检查Solidity版本是否匹配,或者试试 npx hardhat clean 清缓存
  • 网络连接失败:检查API Key是否正确,或者换个节点服务试试
  • MetaMask交易卡住:检查Gas Price设置,测试网可以设高一点

好了,环境准备就绪。下一章我们开始写NFT合约——ERC-721标准,我会带你从零手写一个完整的NFT合约,并部署到测试网。到时候你就能在MetaMask里看到自己铸造的NFT了,想想是不是有点小激动?