hardhat3 源神 -- 啟動!

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;…