在Solidity中导入和加载源文件
将外部文件加载到Remix中有两个主要原因:
导入库或依赖项(对于您不会编辑的文件)
加载一些需要操作、编辑和测试的文件(对于您可能想要编辑的文件)
导入库或依赖项
当从NPM 或 URL (如 GitHub、IPFS 网关或 Swarm 网关) 导入时,您只需要在合约中使用 `import语句,无需在合约编译之前将依赖项预加载到文件资源管理器的当前工作空间中。
从import语句加载的文件放置在Files Explorer当前工作区的.deps
文件夹中。
在幕后,Remix检查这些文件是否已经被加载到**.deps**目录中。如果没有,则通过unpkg获取它们(如果是NPM lib)。
以下是一些示例import语句:
从NPM里导入
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts@4.2.0/token/ERC20/ERC20.sol";
注意: 在上面的示例中,@openzeppelin是npm库的名称。在下面的示例中,该库的名称不以@开头 - 但Remix将会去检查npm是否有这个名称的库。
import "solidity-linked-list/contracts/StructuredLinkedList.sol";
从 Github URL 导入
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.5.0/contracts/math/SafeMath.sol";
如果有的话,您应该指定发布标签,否则将获取主分支中的最新代码。对于OpenZeppelin合约,您应仅使用在官方发布中发布的代码,上面的示例导入了OpenZeppelin Contracts v2.5.0版本。
从 Swarm 导入
import 'bzz-raw://5766400e5d6d822f2029b827331b354c41e0b61f73440851dd0d06f603dd91e5';
从 IPFS 导入
import 'ipfs://Qmdyq9ZmWcaryd1mgGZ4PttRNctLGUSAMpPqufsk6uRMKh';
导入不在 .deps 中的本地文件
要导入不在.deps文件夹中的文件,请使用相对路径(./)。例如:
import "./myLovelyLovelyLib.sol";
注意: 无法导入整个工作区。
从计算机的文件系统导入文件
这种方法使用 remix的 **remixd ** 守护进程。请访问 remixd(remixd.html)文档查看有关如何在浏览器和计算机文件系统之间建立桥梁的说明。
更多关于import关键字
关于import
关键字的详细解释,见Solidity documentation
导入文件以进行操作。
当从主页小部件或通过控制台中的 remix 命令导入时,文件将被放置在当前工作空间的根目录中的一个文件夹内,该文件夹显示它们的来源,如 GitHub 或 Gists。
在控制台中使用remix命令进行加载
两个用于加载的remix命令是:
remix.loadurl(url)
remix.loadgist(id)
remix.loadurl('https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.5.0/contracts/math/SafeMath.sol')
remix.loadgist('5362adf2000afa4cbdd2c6d239e06bf5')
访问从主页选项卡或remix命令中加载的文件
当你从Github加载时,会在当前工作区的根目录下创建一个名为github
目录的文件夹。要从该文件夹导入文件,您可以使用以下命令:
import "github/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol";
请注意,此导入语句不包括 remix.load(url) 命令中的版本信息。因此建议您使用本页顶部描述的方法来导入您不打算编辑的依赖项。
假设包含上述导入语句的 .sol 文件位于 contracts 文件夹中。请注意,此导入语句无需使用相对路径遍历回 github 文件夹,例如:../github
。