npm包truffle-resolver-fix-relative-path-issue使用教程

前言

Web3开发中,我们经常会用到solidity语言编写的智能合约。而开发智能合约的第一步,是要配置一个本地的测试环境。有很多工具可以实现这个目的,Truffle是其中一个比较出色的框架。但是,使用Truffle的过程中,我们会遇到一个非常头疼的问题——相对路径的问题。这篇文章,将会介绍一个解决这个问题的npm包:truffle-resolver-fix-relative-path-issue。

问题描述

使用Truffle的过程中,我们可能需要在不同的项目之间复用合约,以及引用第三方库。这时,我们就需要在文件中使用相对路径来引用合约或者库。例如:

------ -------------------

但是,这样做会导致一个问题:当我们在Truffle的开发环境中运行这个合约时,Truffle并不会解析相对路径,而是将这个路径视为相对于启动Truffle的路径。这样就会导致一个找不到文件的错误。

解决方案

truffle-resolver-fix-relative-path-issue是针对上述问题的解决方案。这个npm包可以在Truffle的开发环境中解析相对路径,并将相对路径转化为正确的绝对路径。这样,我们就可以在Truffle中成功地引用合约或者库了。

安装

我们可以使用npm来安装truffle-resolver-fix-relative-path-issue:

--- ------- ---------------------------------------- ----------

使用方法

1.首先,在truffle项目的根目录下,创建一个新的文件夹:resolver。

2.在resolver文件夹中创建一个新的文件:resolver.js。这个文件将会使用truffle-resolver-fix-relative-path-issue的功能来解析相对路径。

3.在resolver.js文件中,引入truffle-resolver-fix-relative-path-issue:

----- -------- - ----------------------------------------------------

4.接下来,定义一个resolve方法,在这个方法中使用Resolver来解析相对路径。代码如下:

-------- ------------------- ------------- -
    ----- --------------- - --- -----------
    ----- -------- - ----------------------------------- --------------
    ------ ---------
-

5.最后,在你的truffle项目的配置文件truffle.js(或者truffle-config.js)中,添加如下代码:

-------------- - -
    -- ------
    ---------- -
        ----- -
            -------- -------- -- --------------------
            -- ------
            --------- -
                -- ------
                --------- -
                    -- ------------------
                    ------- -------------------------------
                --
                -- ------
            --
            -- ------
        -
    --
    -- ------
--

注意,x.x.x应当替换为你所使用的solc编译器的版本号。

示例代码

下面是一个示例代码。在这个示例中,我们将引用一个在truffle项目外部的合约库,然后在Truffle的开发环境中运行这个合约库:

1.创建一个新的文件夹:testproject,在这个文件夹中运行npm init -y,在这个文件夹中创建一个新的合约库:mylib.sol。

在mylib.sol中定义一个简单的合约:

------ -------- --------

-------- ----- -

    -------- -------- -- ---- -- ---- -------- ------- ------ -
        ------ - - --
    -

-

2.创建一个新的Truffle项目:testtruffle,在testtruffle项目的根目录下,创建一个新的文件夹:resolver,在这个文件夹中创建一个新的文件:resolver.js,引入truffle-resolver-fix-relative-path-issue,并定义一个resolve方法。

resolver.js的代码如下:

----- -------- - ----------------------------------------------------

-------- ------------------- ------------- -
    ----- --------------- - --- -----------
    ----- -------- - ----------------------------------- --------------
    ------ ---------
-

-------------- - -
    -------- -------
-

3.在mylib.sol的上级目录中,创建一个新的合约文件:mycontract.sol,在这个文件中引入mylib.sol库。

import "../mylib.sol";

contract MyContract {

-------- --------- ---- ------ ------------- -
    ----- ----- - --- --------
    ------ ---------------
-

}

4.在testtruffle项目的根目录下,为Truffle创建配置文件:truffle.js,配置文件的代码如下:

----- -------- - -------------------------------

-------------- - -
  --------- -
    ------------ -
      ----- ------------
      ----- -----
      -- ------
    -
  --
  ---------- -
    ----- -
      -------- --------- -- --------------------
      --------- -
        ---------- -
          -------- -----
          ----- ---
        --
        --------- -
          ------- -------------------------------
        --
        ----------- -----------
      -
    -
  -
--

5.运行命令truffle compile,将mycontract.sol合约编译到build目录下。

6.在build目录下,找到compile-info.json文件,文件的内容如下:

-
  ---------- -
    ----------------- -
      ------------ -
        ------------- -
          ------ ---
          ----------- -----
          ------ -
            ----------- -
              --------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            --
            ------------------- -
              --------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
              ---------- ---
              ------------ --
            -
          -
        -
      --
      ---------- ------------------------
    --
    ------------ -
      ------------ -
        -------- -
          ------ ---
          ----------- -----
          ------ -
            ----------- -
              --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
              ---------- ---
              ------------ --
            --
            ------------------- -
              --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
              ---------- ---
              ------------ --
            -
          -
        -
      --
      ---------- ------------------------
    -
  --
  ---------- -----------------------------------------
-

可以看到,compile-info.json中的bytecode已经正确地引用了mylib.sol库,并将相对路径转化为了绝对路径。

7.在Truffle的开发环境中运行mycontract.sol合约:

------- -------
- -------
- --- ---------- - ----- ---------------------
- --- ------ - ----- --------------------
- ------
-

可以看到,MyContract中成功创建了MyLib实例,并调用了MyLib的add函数。

综上,通过使用truffle-resolver-fix-relative-path-issue,我们可以顺利地在Truffle中使用相对路径引用合约和库,从而提高我们的开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6005728381e8991b448e8b8c


猜你喜欢

  • npm 包 react-jsonschema-form-john 使用教程

    在前端开发中,我们常常需要设计和实现表单,以让用户输入数据。而 react-jsonschema-form-john 是一个能够帮助我们简化表单开发的 npm 包。

    3 年前
  • npm 包 kevoree-comp-tweet 使用教程

    什么是 kevoree-comp-tweet? kevoree-comp-tweet 是一个基于 Kevoree 平台的 npm 包,它提供的是一个 Twitter 组件,可以让开发者快速地在自己的应...

    3 年前
  • npm包 @cristian10/platzom使用教程

    前言 在前端开发中,使用npm包是一项常见的操作。而 npm包 @cristian10/platzom 是一个用于字符串的转换库,支持将一段文本进行词汇变形,如单复数转换、字符串反转等。

    3 年前
  • npm 包 xiao-web-cli 使用教程

    前言 随着前端技术的不断发展,前端开发的工作越来越复杂,需要频繁地使用各种工具进行构建、部署等工作。npm 是前端中非常流行的包管理器,它可以帮助我们方便地获取和管理各种前端相关的包。

    3 年前
  • npm 包 vn-vis 使用教程

    介绍 vn-vis 是一款基于 Vue 的可视化图表库,使用简单,易上手,可以帮助前端开发人员快速地创建各种图表,包括折线图、柱状图、饼图等,同时还支持数据的过滤、排序、高级筛选等功能。

    3 年前
  • npm 包 @rh389/react-native-radial-gradient 使用教程

    在 React Native 中,渐变是一个常见的效果,它可以让 UI 更加生动。而 @rh389/react-native-radial-gradient 是一个 React Native 组件,它...

    3 年前
  • npm 包 hologger-local 使用教程

    在前端开发中,日志的输出和管理是一个非常重要的问题。虽然使用 console.log 可以输出日志,但是在大型项目中,console.log 不够方便且不够灵活。因此,我们需要一种更好的方式来输出日志...

    3 年前
  • npm 包 @ngirl/nom-utils 使用教程

    介绍 @ngirl/nom-utils 是一个用于 Node.js 和浏览器环境中的 JavaScript 工具库,提供了一系列常用的工具函数和类。 该 npm 包主要针对前端开发人员,旨在提高代码的...

    3 年前
  • npm 包 gulp-less-dynamic-variables 使用教程

    在前端开发中,我们经常需要使用 CSS 预处理器进行样式编写。less 是其中一种非常流行的 CSS 预处理器,它提供了许多方便的功能,比如变量、嵌套、混合等等。而 gulp 则是一种自动化构建工具,...

    3 年前
  • npm 包 debugs 使用教程

    在前端开发中,我们经常需要调试代码。使用调试工具可以帮助我们快速定位错误,并进行修复。npm 包 debugs 就是一款非常好用的调试工具,它可以让我们在开发过程中更高效的进行调试。

    3 年前
  • npm 包 jj-date 使用教程

    在前端开发中,日期格式通常会被频繁使用。在日常开发中,需要对不同的地区和语言进行日期格式化的处理,这是一项相对繁琐的工作。而 npm 包 jj-date 则为我们提供了一种非常方便的解决方案,该包提供...

    3 年前
  • npm 包 jm-game-ecs 使用教程

    介绍 jm-game-ecs 是一个使用 TypeScript 实现的基于 Entity-Component-System (ECS) 架构的游戏引擎。 它提供了丰富的组件,系统和实体生命周期管理方式...

    3 年前
  • npm 包 generate-swap-generator-example 使用教程

    前言 在前端开发中,我们经常需要生成复杂的交换机控件。这些控件有时候十分复杂,甚至需要动态生成。为了方便生成这些控件,我们可以使用 npm 包 generate-swap-generator-exam...

    3 年前
  • npm 包 markdown-it-criticmarkup 使用教程

    简介 markdown-it-criticmarkup 是一个 npm 包,它提供了 CriticMarkup 到 HTML 的转换。CriticMarkup 是一种标记语言,旨在为文本编辑和校对提供...

    3 年前
  • npm 包 plug-them-holes 使用教程

    最近在开发一个前端项目中,我们常常需要用到第三方库来解决一些问题,但往往这些第三方库并不能完全符合我们的需求。于是,我们需要自己去编写一些代码来修补这些第三方库的漏洞。

    3 年前
  • npm 包 pomelo-red-dot 使用教程

    前言 在现代 web 应用程序中,往往需要通过实时消息通信更新客户端的 UI 界面。Pomelo 红点 npm 包提供了实时更新红点的功能,小而轻巧,易于使用。 安装 在使用之前,需要先安装 pome...

    3 年前
  • npm 包 sl-react-native-tab-view 使用教程

    背景 在任何一个移动端应用程序中,选项卡是最常见的导航组件之一。它们经常用于许多场景,例如让用户在不同的模式和视图之间进行选择,导航到不同的页面,并将大型数据集分成易管理的子集等等。

    3 年前
  • npm 包 sl-react-native-web 使用教程

    前言 在 Web 端开发中,我们通常使用 React 来构建 UI 组件,而 React Native 则用于构建原生应用。但是,对于想要同时开发 Web 端和移动端的应用来说,这两个技术栈的不一致性...

    3 年前
  • npm包 sl-react-native-web-webview 使用教程

    介绍 sl-react-native-web-webview 是一个基于 React Native 封装的 WebView 组件,可以轻松在 React Native 项目中使用。

    3 年前
  • npm 包 @musaka/node-wechat-api 使用教程

    npm 包 @musaka/node-wechat-api 使用教程 前言 随着移动互联网的巨大发展,微信已经成为了人们分享信息和社交交流的主要方式之一。现在,越来越多的企业和个人都开始将微信集成到自...

    3 年前

相关推荐

    暂无文章