执行yo hyperledger-composer无法正确导入模型

时间:2017-08-30 12:30:33

标签: angular hyperledger-composer yo

构建一个简单的基于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的编写器测试网络。但是,生成的应用程序无法找到“成员”,显然在生成和构建过程中未导入base.cto文件。哟为此网络的模型文件夹中的每个文件生成.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语句才能正常运行。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

如果有许多必需的import语句,可以构建一个强制bash exec来将必要的文件合并为一个替代方案,直到解决了这个问题。