3、开发环境搭建:从零开始,把工具箱备齐

说实话,每次开始一个新项目,我最享受的就是搭建环境这个环节。就像木匠开工前要磨好刨子,程序员写代码前也得把工具备齐。这一章,咱们就把 NFT 平台开发需要的所有工具,一个一个装好、配好。

我个人习惯把环境搭建分成三块:基础工具(Node.js、Git)、区块链框架(Truffle/Hardhat)、节点服务(Infura/Alchemy)。咱们按顺序来,别急。

3.1 安装 Node.js 和 npm/yarn

Node.js 是整个开发环境的核心。没有它,后面所有工具都跑不起来。

下载安装

去官网 nodejs.org 下载 LTS 版本。我建议用 LTS,别追新。曾经有个同事装了最新版,结果某个依赖包不兼容,折腾了一下午。

# 验证安装
node -v
# 输出类似 v18.17.0

npm -v
# 输出类似 9.6.7

npm 还是 yarn?

我个人更倾向 yarn,因为它的依赖管理更稳定,安装速度也快。但 npm 是官方标配,用哪个都行。

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

# 验证
yarn --version
小提示: 如果你在中国大陆,建议配置淘宝镜像,不然下载依赖包会慢到怀疑人生。
npm config set registry https://registry.npmmirror.com
yarn config set registry https://registry.npmmirror.com

3.2 安装 Git 并配置

Git 是版本控制的标配,没有它,代码管理就是一团乱麻。

# 下载安装后验证
git --version

# 配置用户名和邮箱(重要!)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"

嗯,这里要注意:邮箱最好和你的 GitHub 账号一致,不然提交记录会显示成两个不同的人。我曾经因为这个被队友吐槽过。

3.3 选择框架:Truffle 还是 Hardhat?

这是个经典问题。我两个都用过,说说我的感受。

对比项 Truffle Hardhat
上手难度 简单,配置少 稍复杂,但灵活
调试能力 一般 强,内置 console.log
插件生态 成熟 快速增长
本地测试链 Ganache(独立应用) Hardhat Network(内置)
社区活跃度 稳定 目前更活跃

我个人现在更常用 Hardhat。为什么?因为它内置了本地测试链,不用额外启动 Ganache,而且调试时可以直接在 Solidity 代码里写 console.log,太方便了。

安装 Hardhat

mkdir nft-platform
cd nft-platform
npm init -y
npm install --save-dev hardhat

# 初始化项目
npx hardhat init
# 选择 "Create an empty hardhat.config.js"

安装 Truffle(如果你想用)

npm install -g truffle
truffle init
注意: 如果你同时安装了两个框架,记得在项目根目录只保留一个配置文件。不然容易混淆,我见过有人把 Truffle 的配置写到 Hardhat 项目里,跑了一整天没跑通。

3.4 配置 MetaMask 钱包

MetaMask 是浏览器里的以太坊钱包,开发测试时必不可少。

  1. 去 Chrome 应用商店搜索 MetaMask,安装扩展
  2. 创建钱包,保存好助记词(别截图,别存云端)
  3. 添加测试网络:打开设置 → 网络 → 添加网络

配置本地测试网络参数:

网络名称 Localhost 8545
RPC URL http://127.0.0.1:8545
链 ID 31337(Hardhat 默认)或 1337(Ganache 默认)
货币符号 ETH
关键点: 测试网络的链 ID 必须和你的本地链一致。我刚开始学的时候,链 ID 配错了,MetaMask 一直报错,折腾了半小时才发现是这个问题。

3.5 注册 Infura 或 Alchemy 节点服务

为什么需要节点服务?因为你的 DApp 不能直接连以太坊主网,需要一个中间人帮你转发交易。Infura 和 Alchemy 就是干这个的。

注册步骤(以 Alchemy 为例)

  1. 打开 alchemy.com,注册账号
  2. 创建一个 App,选择网络(比如 Ethereum Goerli 测试网)
  3. 复制 HTTP Endpoint 地址,后面部署合约时会用到

我个人推荐 Alchemy,因为它的免费额度更慷慨,而且有实时监控面板,方便调试。

# 在 .env 文件中保存你的 API Key
ALCHEMY_API_KEY=your_key_here
SEPOLIA_PRIVATE_KEY=your_wallet_private_key
安全警告: 永远不要把私钥提交到 GitHub!我见过有人把包含私钥的 .env 文件传上去了,结果钱包里的测试币被清空。虽然只是测试币,但也挺闹心的。

3.6 启动本地测试链

本地测试链让你可以在自己的电脑上模拟区块链环境,不用花钱,也不用等区块确认。

方式一:Hardhat Network(推荐)

npx hardhat node

# 输出示例:
# Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/
# 
# Accounts
# ========
# Account #0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000 ETH)
# ...

它会自动创建 20 个测试账户,每个有 10000 ETH,随便用。

方式二:Ganache(如果你用 Truffle)

# 安装 Ganache CLI
npm install -g ganache-cli

# 启动
ganache-cli -p 8545

我个人更喜欢 Hardhat Network,因为它启动更快,而且和 Hardhat 框架无缝集成。

3.7 部署第一个 Hello World 合约

环境搭好了,总得跑个 Hello World 试试吧?

写合约

// contracts/HelloWorld.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract HelloWorld {
    string public message;

    constructor() {
        message = "Hello, NFT World!";
    }

    function setMessage(string memory _newMessage) public {
        message = _newMessage;
    }
}

写部署脚本

// scripts/deploy.js
async function main() {
    const HelloWorld = await ethers.getContractFactory("HelloWorld");
    const hello = await HelloWorld.deploy();
    await hello.waitForDeployment();

    console.log("合约部署地址:", await hello.getAddress());
}

main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
});

运行部署

# 先启动本地链(另一个终端)
npx hardhat node

# 部署合约
npx hardhat run scripts/deploy.js --network localhost

# 输出示例:
# 合约部署地址: 0x5FbDB2315678afecb367f032d93F642f64180aa3
成功了! 看到这个地址,说明你的开发环境已经完全打通了。从 Node.js 到 Hardhat,从本地链到合约部署,整个链路都跑通了。

3.8 避坑指南

  • 端口冲突: 如果 8545 端口被占用,可以用 --port 8546 指定其他端口
  • 版本兼容: Hardhat 2.x 需要 Node.js 16+,别用太老的版本
  • Gas 费用: 本地测试链不需要真钱,但部署到测试网时记得领测试币
  • 网络切换: 部署前确认 MetaMask 选对了网络,我曾在主网上部署过测试合约,花了真金白银

好了,环境搭建就到这里。下一章咱们开始写真正的 NFT 合约,到时候这些工具就全派上用场了。