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才能调用智能合约。
安装与基本配置:
- 去Chrome应用商店搜索「MetaMask」并安装
- 创建钱包(记得安全保存助记词!)
- 添加以太坊测试网络(比如 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 申请步骤
- 访问
infura.io,注册账号 - 创建新项目,选择「Ethereum」
- 复制你的 Project ID(就是API Key)
- 选择网络:Sepolia(测试网)
Alchemy 申请步骤
- 访问
alchemy.com,注册账号 - 创建 App,选择「Ethereum」和「Sepolia」
- 复制 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了,想想是不是有点小激动?