1

我需要从命令行使用 hardhat 运行特定的 ts 脚本,但我需要指定参数...与此类似:

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

其中--network rinkeby安全帽运行的参数 和
是task -executor.ts脚本的参数。 我找不到有关此问题的任何帖子,也无法使其正常工作。param1param2

我还尝试定义一个安全帽任务并添加了这些参数,但如果我尝试执行它,我会得到:

Error HH9: Error while loading Hardhat's configuration.    
You probably tried to import the "hardhat" module from your config or a file imported from it.
This is not possible, as Hardhat can't be initialized while its config is being defined.

因为我需要在该特定任务中导入hreethers从中导入。hardhat

有人知道如何完成我需要的吗?

非常感谢!!

4

2 回答 2

0

根据安全帽

Hardhat 脚本对于不接受用户参数的简单事物以及与不太适合 Hardhat CLI 的外部工具(如 Node.js 调试器)集成很有用。

对于需要参数的脚本,您应该使用Hardhat Tasks

您可以将任务编码在与hardhat.config.ts不同的文件中。这是使用文件sampleTask.ts中的位置参数的示例任务:

import { task } from "hardhat/config";

task("sampleTask", "A sample task with params")
  .addPositionalParam("param1")
  .addPositionalParam("param2")
  .setAction(async (taskArgs) => {
    console.log(taskArgs);
  });

请记住将其导入hardhat.config.ts

import "./tasks/sampleTask";

然后运行它:

npx hardhat sampleTask hello world 

它应该打印:

{ param1: 'hello', param2: 'world' }

您可以在此处阅读有关任务的命名、位置和可选参数的更多信息。

如果需要使用hreor ethers,可以hre从函数的第二个参数中获取setAction

task("sampleTask", "A sample task with params")
  .addPositionalParam("param1")
  .addPositionalParam("param2")
  .setAction(async (taskArgs, hre) => {
    const ethers = hre.ethers;
  });
于 2022-01-25T23:42:11.937 回答
0

通常它是这样工作的:

const hre = require('hardhat'); 
const { ethers } = hre; 
于 2022-01-25T12:13:27.803 回答