【问题标题】:Executing yo hyperledger-composer fails to correctly import model执行 yo hyperledger-composer 无法正确导入模型
【发布时间】:2017-08-30 12:30:33
【问题描述】:

构建一个简单的基于 hyperledger-composer 的应用,并使用类似于车辆生命周期示例代码中的模型定义。具体来说,我有两个模型文件: base.cto

namespace composer.base

abstract participant Member {
  o String companyName
}

和sample.cto(部分列表)

namespace org.acme.Z2BTestNetwork
import composer.base.*
import composer.events.*

participant Buyer identified by buyerID extends Member{
    o String buyerID
}
participant Seller identified by sellerID extends Member{
    o String sellerID
}

asset Order identified by orderNumber {
    o String orderNumber
    o String[] items

我能够使用 composer-rest-server 服务和基于 Bluemix 的 composer 成功地构建网络并测试网络。然而,一个 yo 生成的应用程序无法找到“成员”,显然在生成和构建过程中没有导入 base.cto 文件。 yo 为该网络的模型文件夹中的每个文件生成一个 .ts 文件。与“sample.cto”对应的 .ts 文件包含以下内容,但是它缺少 base.cto 文件(位于不同的 .ts 文件中)的抽象定义,并且缺少指向该文件的任何链接。

import {Asset} from './org.hyperledger.composer.system';
import {Participant} from './org.hyperledger.composer.system';
import {Transaction} from './org.hyperledger.composer.system';
import {Event} from './org.hyperledger.composer.system';
// export namespace org.acme.Z2BTestNetwork{
   export class Buyer extends Member {
      buyerID: string;
   }
   export class Seller extends Member {
      sellerID: string;
   }
   export class Shipper extends Member {
      shipperID: string;
   }
   export class Provider extends Member {
      providerID: string;
   }
   export class FinanceCo extends Member {
      financeCoID: string;
   }
   export class Order extends Asset {
      orderNumber: string;
      items: string[];

此应用程序需要额外的导入语句才能正常运行。

import {Member} from './org.acme.Z2BTestNetwork.base';

这似乎是这个 yo 用于 hyperledger-composer 的实现中的一个错误。关于自动修复此问题的任何建议?

注意如果选择了使用命名空间的 yo 选项,则仅从 sample.cto 生成单个文件。 base.cto 文件不再导致生成 .ts 文件;但是 base.cto 文件中的定义没有被使用,并且应用程序仍然无法加载,因为缺少在 base.cto 文件中定义的 Member 抽象定义。

【问题讨论】:

标签: angular hyperledger-composer yo


【解决方案1】:

这确实看起来像一个错误。我会调查、创建问题并修复。

【讨论】:

  • 按照 Bob 的建议,我通过将这些导入命令硬编码到各自的文件中来成功编译。就我而言,它看起来像这样:import {ContactDetails} from './composer.base'; import {MedicalDevice} from './composer.manufacturer'; import {Distributor} from './composer.distributor';
  • 也许我在某处遗漏了关键步骤,但它仍然失败。我已经检查以确保 docker 映像是最新的,更新了二进制文件,更新了全局 npm 模块并运行 exec 以使用现有的 rest 接口并生成自己的,使用或不使用命名空间,并且每次都得到相同的失败时间。
  • 你用的是什么版本?在 0.12.0 中对此进行了修复
【解决方案2】:

在修复错误之前,需要手动解决。那就是将必要的导入语句添加到基本的 .ts 文件中——在我的例子中,这将是 org.acme.Z2BTestNetwork.ts 文件。您在目标环境中需要的每个类都需要导入。由于我只缺少一个类(成员),因此只需要一个导入语句。

如果有许多必需的 import 语句,则可以构建一个蛮力 bash exec 将必要的文件合并在一起作为替代方案,直到解决此问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2017-12-24
  • 2020-04-06
  • 2020-08-28
  • 2013-11-09
  • 2020-01-30
相关资源
最近更新 更多