You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为hardhat run命令执行的TS脚本传递自定义参数?

解决Hardhat运行脚本时传入自定义参数的两种方案

方案1:直接给hardhat run指定的脚本传参

Hardhat支持通过--分隔符区分Hardhat自身参数和脚本参数,你期望的命令可以调整为以下格式:

npx hardhat run --network rinkeby scripts/task-executor.ts -- param1 param2

其中--是必须的,作用是告知Hardhat后续参数无需作为Hardhat自身参数解析,直接透传给目标脚本。
在task-executor.ts中直接通过process.argv读取参数即可,示例代码如下:

// scripts/task-executor.ts
import { ethers } from "hardhat";

async function main() {
  // process.argv前两位分别是node路径、脚本路径,后续元素为传入的自定义参数
  const param1 = process.argv[2];
  const param2 = process.argv[3];
  console.log("参数1:", param1);
  console.log("参数2:", param2);
  // 此处填写你的业务逻辑
}

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

该方案无需修改Hardhat配置,完全贴合你期望的命令使用习惯。

方案2:正确定义自定义Hardhat任务(解决HH9报错)

你之前出现HH9报错是因为在Hardhat配置文件加载阶段,提前导入了hardhat包下的hre或ethers,此时Hardhat还未完成初始化。正确的自定义任务写法如下:

// hardhat.config.ts
import { HardhatUserConfig, task } from "hardhat/config";
import "@nomiclabs/hardhat-ethers";
// 禁止在配置文件顶部导入hre/ethers,会触发HH9错误

// 定义自定义任务
task("runExecutor", "执行task-executor逻辑")
  .addPositionalParam("param1", "第一个自定义入参")
  .addPositionalParam("param2", "第二个自定义入参")
  .setAction(async (taskArgs, hre) => {
    // 所有依赖hre/ethers的逻辑都写在setAction回调内,回调接收的hre是已完成初始化的实例
    const { ethers } = hre;
    const param1 = taskArgs.param1;
    const param2 = taskArgs.param2;
    console.log("参数1:", param1);
    console.log("参数2:", param2);
    // 此处填写你的业务逻辑
  });

const config: HardhatUserConfig = {
  // 你原有的配置内容,比如solidity版本、网络配置等
  solidity: "0.8.17",
};

export default config;

配置完成后使用以下命令执行即可:

npx hardhat runExecutor --network rinkeby param1 param2

内容的提问来源于stack exchange,提问作者DB - Solhint TL - Protofire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:06:04