Hardhat 项目开发环境搭建完整指南

1. 从 GitHub 下载项目

# 使用 SSH 方式克隆(需要配置 SSH key)
git clone git@github.com:NomicFoundation/hardhat.git# 或使用 HTTPS 方式
git clone https://github.com/NomicFoundation/hardhat.git# 进入项目目录
cd hardhat

2. 判断项目包管理器类型

判断依据和方法

# 方法1:查看锁文件
ls -la | grep -E "pnpm-lock|yarn.lock|package-lock"

判断标准:

  • 存在 pnpm-lock.yaml → 使用 pnpm
  • 存在 yarn.lock → 使用 yarn
  • 存在 package-lock.json → 使用 npm
# 方法2:查看 package.json 中的 packageManager 字段
cat package.json | grep packageManager# 方法3:查看是否有 workspace 配置文件
ls -la | grep -E "pnpm-workspace.yaml|lerna.json"

Hardhat 项目特征:

  • ✅ 存在 pnpm-workspace.yaml 文件
  • ✅ package.json 中 "private": true
  • ✅ 使用递归命令 pnpm run --recursive
  • 结论:Hardhat 使用 pnpm 作为包管理器

安装对应的包管理器

# 安装 pnpm(如果没有)
npm install -g pnpm# 验证安装
pnpm --version

3. 下载依赖

# 使用 pnpm 安装依赖(Hardhat 推荐)
pnpm install# 如果遇到网络问题,使用国内镜像
pnpm config set registry https://registry.npmmirror.com
pnpm install# 如果有构建脚本警告
pnpm approve-builds  # 审批需要运行的构建脚本

常见问题解决:

# 如果提示包找不到或 404 错误
pnpm install --no-frozen-lockfile# 如果有缓存问题
pnpm store prune
pnpm install

4. 编译项目

# 构建所有包
pnpm build# 如果构建时间过长,可以构建特定包
pnpm --filter hardhat-core build
pnpm --filter hardhat-ethers build# 查看所有可构建的包
pnpm ls -r --depth=0

构建顺序建议:

  1. 先构建核心包:pnpm --filter hardhat-core build
  2. 再构建依赖它的包:pnpm build

5. 运行测试文件

# 运行所有测试
pnpm test# 运行特定包的测试
pnpm --filter hardhat-core test# 带详细输出的测试
pnpm test --stream# 设置超时(避免卡住)
pnpm test -- --timeout 10000# 跳过慢速测试
SKIP_SLOW_TESTS=true pnpm test# 只运行特定测试
pnpm test -- --grep "specific test name"

测试卡住的解决方法:

# 1. 中断测试 (Ctrl+C)# 2. 跳过编译器下载测试
pnpm test -- --grep "compiler" --invert# 3. 只测试你修改的部分
pnpm --filter <package-name> test

6. 重新下载编译(清理并重建)

完整清理脚本

#!/bin/bash
# clean-rebuild.shecho "🧹 开始清理..."# 1. 清理所有 node_modules
find . -name "node_modules" -type d -prune -exec rm -rf {} \; 2>/dev/null# 2. 清理构建产物
find . -name "dist" -type d -prune -exec rm -rf {} \; 2>/dev/null
find . -name "build" -type d -prune -exec rm -rf {} \; 2>/dev/null
find . -name "*.tsbuildinfo" -type f -delete 2>/dev/null# 3. 清理缓存
rm -rf .cache
rm -rf coverage
rm -rf .nyc_output# 4. 清理锁文件(可选)
# rm -f pnpm-lock.yaml# 5. 清理 pnpm 存储
pnpm store pruneecho "📦 重新安装依赖..."
pnpm installecho "🔨 重新构建..."
pnpm buildecho "✅ 完成!"

使用方法:

chmod +x clean-rebuild.sh
./clean-rebuild.sh

快速清理命令

# 清理并重建
pnpm clean && pnpm install && pnpm build# 只清理 node_modules
rm -rf node_modules packages/*/node_modules v-next/*/node_modules# 只清理构建产物
pnpm clean

7. 解决文件引入爆红问题

问题原因

TypeScript 配置文件未生效,VS Code 未正确识别项目结构。

解决方法

方法1:保存配置文件触发重载
# 找到并重新保存这些文件(触发 VS Code 重新加载)
touch tsconfig.json
touch tsconfig.base.json
touch packages/*/tsconfig.json
方法2:重启 TypeScript 服务
  1. 在 VS Code 中按 Ctrl+Shift+P
  2. 输入 “TypeScript: Restart TS Server”
  3. 回车执行
方法3:修复 TypeScript 配置
# 创建/更新基础配置
cat > tsconfig.base.json << 'EOF'
{"compilerOptions": {"target": "ES2020","module": "commonjs","lib": ["ES2020"],"moduleResolution": "node","esModuleInterop": true,"allowSyntheticDefaultImports": true,"strict": true,"skipLibCheck": true,"forceConsistentCasingInFileNames": true,"resolveJsonModule": true,"baseUrl": ".","types": ["node"]}
}
EOF# 重新打开文件或重启 VS Code
方法4:VS Code 工作区设置
# 创建 VS Code 配置
mkdir -p .vscode
cat > .vscode/settings.json << 'EOF'
{"typescript.tsdk": "node_modules/typescript/lib","typescript.enablePromptUseWorkspaceTsdk": true
}
EOF

8. Hardhat 目录结构说明

核心目录结构

hardhat/
├── packages/                  # 📦 核心包目录(monorepo 结构)
│   ├── hardhat-core/         # 🎯 Hardhat 核心功能
│   │   ├── src/             # 源代码
│   │   │   ├── builtin-tasks/  # 内置任务(compile, test, run等)
│   │   │   ├── internal/       # 内部实现
│   │   │   └── types/          # TypeScript 类型定义
│   │   └── test/            # 测试文件
│   │
│   ├── hardhat-ethers/       # 🔗 Ethers.js 集成插件
│   ├── hardhat-web3/         # 🌐 Web3.js 集成插件
│   ├── hardhat-waffle/       # 🧪 Waffle 测试框架集成
│   ├── hardhat-truffle5/     # 🔄 Truffle 兼容层
│   ├── hardhat-vyper/        # 🐍 Vyper 编译器支持
│   ├── hardhat-solhint/      # 📝 Solhint 代码检查
│   ├── hardhat-network-helpers/ # 🛠️ 网络辅助工具
│   └── hardhat-toolbox/      # 🧰 常用工具集合包
│
├── v-next/                    # 🚀 下一版本开发目录
│   ├── hardhat/              # 新版本核心
│   └── hardhat-verify/       # 合约验证功能
│
├── config/                    # ⚙️ 项目配置文件
│   └── eslint/              # ESLint 配置
│
├── docs/                      # 📚 文档
│
├── scripts/                   # 🔧 构建和维护脚本
│
├── .changeset/               # 📝 版本变更记录(用于发布)
│
├── .github/                  # 🐙 GitHub 配置
│   └── workflows/           # CI/CD 工作流
│
├── pnpm-workspace.yaml       # 📦 pnpm 工作空间配置
├── package.json              # 📋 根项目配置
├── tsconfig.json            # 🔷 TypeScript 配置
└── README.md                # 📖 项目说明

各目录详细说明

packages/ - 核心包集合
  • 作用:包含所有 Hardhat 官方包和插件
  • 特点:每个子目录都是独立的 npm 包,可单独发布
  • 开发:新功能通常在这里添加
packages/hardhat-core/
  • 作用:Hardhat 的核心引擎
  • 包含
    • 任务系统
    • 配置管理
    • 插件系统
    • Hardhat Network(内置 EVM)
    • 编译器管理
v-next/
  • 作用:下一个主要版本的开发目录
  • 特点:实验性功能,可能有破坏性变更
config/
  • 作用:共享配置文件
  • 内容:ESLint、Prettier、TypeScript 基础配置
scripts/
  • 作用:项目维护脚本
  • 包含
    • 构建脚本
    • 发布脚本
    • 代码生成工具
.changeset/
  • 作用:管理版本变更和发布
  • 工作流
    pnpm changeset  # 创建变更记录
    pnpm version-packages  # 更新版本
    pnpm release  # 发布到 npm
    

开发新功能的位置选择

注意:这个项目主要在 v-next/ 目录下开发,而不是 packages/ 目录。

  1. 添加新功能v-next/ 下选择合适的包或创建新包
  2. 查看现有包ls -la v-next/ 查看 28 个现有包
  3. 创建新插件 → 在 v-next/ 下创建新目录
  4. 修改核心功能v-next/hardhat/
  5. 添加验证功能v-next/hardhat-verify/

查看 v-next 包列表

# 查看所有 v-next 下的包
ls -la v-next/# 统计包数量
ls -1 v-next/ | wc -l  # 应该显示 28# 查看每个包的 package.json
for dir in v-next/*/; doecho "=== $(basename $dir) ==="cat "$dir/package.json" | grep '"name"' 2>/dev/null
done

快速开始开发

# 1. 克隆并进入项目
git clone git@github.com:NomicFoundation/hardhat.git
cd hardhat# 2. 安装依赖
pnpm install# 3. 构建项目
pnpm build# 4. 开始开发
# 修改代码...# 5. 测试修改
pnpm test# 6. 创建变更记录(准备发布)
pnpm changeset

常用命令速查

# 依赖管理
pnpm install              # 安装依赖
pnpm add <package>        # 添加新依赖
pnpm remove <package>     # 移除依赖# 构建
pnpm build               # 构建所有包
pnpm clean               # 清理构建产物
pnpm --filter <pkg> build # 构建特定包# 测试
pnpm test                # 运行所有测试
pnpm test -- --watch     # 监听模式
pnpm --filter <pkg> test # 测试特定包# 代码质量
pnpm lint                # 运行 lint
pnpm lint:fix            # 自动修复 lint 问题# 版本管理
pnpm changeset           # 创建变更记录
pnpm version-packages    # 更新版本号

故障排除

问题解决方法
依赖安装失败pnpm install --no-frozen-lockfile
构建失败先清理:pnpm clean 再构建
测试卡住使用 Ctrl+C 中断,跳过慢速测试
TypeScript 错误重启 TS Server 或重新保存 tsconfig.json
内存不足NODE_OPTIONS="--max-old-space-size=4096" pnpm build

提示:这是一个 monorepo 项目,理解其结构对开发很重要。建议先熟悉 pnpm workspaces 的概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95929.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95929.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95929.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遇到 Git 提示大文件无法上传确实让人头疼

遇到 Git 提示大文件无法上传确实让人头疼&#xff0c;但别担心&#xff0c;我们可以一步步来解决。为了让你更清晰地了解整个流程&#xff0c;我先用一个表格来概括主要步骤&#xff1a;步骤核心操作关键命令/工具示例 (用于删除历史中的大文件)1. 定位大文件使用 Git 命令或工…

机器人控制器开发(传感器层——奥比大白相机适配)

编译OrbbecSDK_ROS2的代码 执行命令 colcon buildros2 launch orbbec_camera dabai.launch.py问题1&#xff1a; 运行时报错&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not load library…

C语言(长期更新)第15讲 指针详解(五):习题实战

C语言&#xff08;长期更新&#xff09;第15讲 指针详解&#xff08;五&#xff09;&#xff1a;习题实战 跟着潼心走&#xff0c;轻松拿捏C语言&#xff0c;困惑通通走&#xff0c;一去不回头~欢迎开始今天的学习内容&#xff0c;你的支持就是博主最大的动力。博主主页&#…

数据仓库概要

什么是数据仓库&#xff1f; 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 核心特征 1. 面向主题 数据仓库围绕核心业务主题&#xff08;如客户、产品、销售、财务&#xff09;来组织数据&#xff0c;而不是围绕具体的…

python库 Py2exe 的详细使用(将 Python 脚本变为Windows独立软件包)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、Py2exe 概述 1.1 Py2exe介绍 1.2 Py2exe安装 1.3 替代工具推荐 二、基础使用 2.1 编写打包脚本 2.2 执行打包命令 2.3 完整案例 2.4 配置选项详解 2.5 构建和分发 三、高级配置 3.1 包含隐藏导入 3.2 处理特殊包…

CuTe C++ 简介02,gemm_device cuda kernel 的实现

《CuTe C 简介01&#xff0c;从示例开始 》 中&#xff0c;最后看到了 计算 gemm 的cuda kernel&#xff0c;使用 NVIDIA CUTLASS 的 CUTe (CUDA Tile) 库实现的高性能 GEMM (通用矩阵乘法) CUDA kernel。接下来解释一下这个内核的各个部分。文末再贴一遍代码&#xff0c;方便查…

万代《宝可梦》主题新品扭蛋公开!史上最大尺寸

使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库&#xff0c;旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery方法及其返回值&#xff0c;帮助开发者更好地理解和运用这一强大的库。 1. 选择器方法 jQuery提供了多种…

【FastDDS】Layer Transport ( 05-Shared Memory Transport)

6.4 共享内存传输 共享内存&#xff08;SHM&#xff09;传输依靠主机操作系统提供的共享内存机制&#xff0c;实现了在同一处理单元/机器上运行的实体之间的快速通信。注意 Fast DDS 利用域参与者&#xff08;DomainParticipant&#xff09;的 GuidPrefix_t 来识别在同一主机上…

记 2025/9/6

人工智能常见的模型按照处理问题分为6大类&#xff1a;处理权重问题的权重模型、处理状态问题的状态模型、处理序列问题的问题模型、处理表示问题的表示模型、处理相似度的相似模型、处理分类问题的分类模型。权重是计算特定状态下事物的重要性。状态问题是刻画权重动态变化的过…

开启Python之路,第一节学习大纲-从入门到进阶

前端开启Python之路&#xff0c;前端有没有必要卷后端技术&#xff0c;欢迎各位大神批评指正 第一阶段&#xff1a;基础入门 (打好根基) 目标&#xff1a; 理解编程基本概念&#xff0c;掌握 Python 核心语法&#xff0c;能编写简单的脚本程序。 1、环境搭建与开发工具 安装 Py…

webshell及冰蝎双击无法打开?

什么是webshell&#xff1f; web:万维网 shell&#xff1a;是指一种应用程序&#xff0c;为用户和系统之间建立连接&#xff0c;通过这个界面访问操作系统内核的服务 webshell:是以asp、aspx、php、jsp或者cgi等网页文件形式存在的一种命令执行环境&#xff0c;也可以将其称做…

【星闪】Hi2821 | PWM脉宽调制模块 + 呼吸灯例程

1. 简介PWM&#xff08;Pulse Width Modulation&#xff09;&#xff0c;全称脉宽调制&#xff0c;通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需波形。即对模拟信号电平进行数字编码&#xff0c;通过调节频率、占空比的变化来调节信号的变化。一个 PWM 周期内由一段高…

51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)

一、串行通信与并行通信1、串行通信定义&#xff1a;数据一位一位地按顺序通过单条传输线进行传输的通信方式。优点&#xff1a;传输线少&#xff0c;成本低&#xff0c;适合长距离传输缺点&#xff1a;传输速度相对较慢2、并行通信定义&#xff1a;数据的各位同时通过多条并行…

SpringBoot后端开发常用工具详细介绍——SpringSecurity认证用户保证安全

简单的开始 创建SpringBoot项目 首先创建一个简单的springboot项目&#xff0c;假设端口为8888&#xff0c;添加controller控制层&#xff0c;并在其中添加TestController控制类&#xff0c;那么启动springboot项目之后&#xff0c;访localhost:8888/api/message页面会显示my…

别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!

你是否受够了这些&#xff1f; 刚调通OpenAI的API&#xff0c;老板说“咱们试试国产模型降本增效”&#xff0c;你看着满屏的if-else只想说“我晕”。想给AI加上“查天气”、“执行代码”的能力&#xff0c;却发现Function Calling的代码复杂得让人头皮发麻。本地的Agentdemo惊…

window使用ffmep工具,加自定义脚本执行视频转码成h264(运营人员使用)

技术文章大纲&#xff1a;ffmep配合脚本使用1. 需要提供脚本给视频转码的给运营,给运营上传视频使用安装ffmep windows版本(目前我使用的就是windows)将脚本里面的执行路径修改成自己的电脑安装ffmep/bin/ffmep.exe路径处理好之后就点击执行2.环境准备ffmep windows版解压到一个…

Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分

原题链接&#xff1a; Leetcode 240. 搜索二维矩阵 II 解法一&#xff1a;排除法 参考 【图解】排除法&#xff0c;一图秒懂&#xff01;&#xff08;Python/Java/C/C/Go/JS/Rust&#xff09; 从右上角&#xff1a; class Solution { public:bool searchMatrix(vector<vec…

OCR 证件识别:驱动澳门酒店自助入住智能化

澳门酒店作为国际旅游窗口&#xff0c;每日接待持多元证件的旅客&#xff0c;OCR 证件识别技术的应用&#xff0c;让自助入住终端实现 “一证通办”&#xff0c;大幅提升服务效率。​旅客在自助终端办理入住时&#xff0c;只需将护照、港澳通行证、回乡证、电子身份证等证件贴近…

深入解析汇编语言的奥秘

汇编语言简介汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;直接对应计算机的机器指令集。它通过助记符&#xff08;如 MOV、ADD&#xff09;代替二进制操作码&#xff0c;更接近硬件架构&#xff0c;常用于性能优化、嵌入式开发或逆向工程…

Nextcloud 实战:打造属于你的私有云与在线协作平台

随着数据安全与隐私保护意识的提升&#xff0c;越来越多的个人和组织选择自建云平台来替代公有云。Nextcloud 作为一款开源的文件同步与协作套件&#xff0c;不仅能实现类似网盘的文件存储与分享&#xff0c;还提供日历、联系人、即时通讯、在线文档编辑等协作功能&#xff0c;…