执行 yo hyperledger-composer 无法正确导入模型
Executing yo hyperledger-composer fails to correctly import model
构建一个简单的基于 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 的作曲家。然而,你生成的应用程序无法找到 "Member",显然在生成和构建过程中没有导入 base.cto 文件。 yo 为该网络的模型文件夹中的每个文件生成一个 .ts 文件。对应于 'sample.cto' 的 .ts 文件包含以下内容,但是它缺少 base.cto 文件(位于不同的 .ts 文件中)的抽象定义,并且缺少任何 link 到那个文件。
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 for hyperledger-composer 实现中的一个错误。关于自动修复此问题的任何建议?
注意 如果选择了使用命名空间的 yo 选项,则仅从 sample.cto 生成一个文件。 base.cto 文件不再导致生成 .ts 文件;但是 base.cto 文件中的定义未被使用,应用程序仍然无法加载,因为 base.cto 文件中定义的 Member 缺少抽象定义。
这看起来确实像一个错误。我会调查、创建问题并修复。
在错误修复之前,有一个手动解决方法。那就是将必要的导入语句添加到基础 .ts 文件中——在我的例子中,这将是 org.acme.Z2BTestNetwork.ts 文件。您在目标环境中需要的每个 classes 都需要导入。由于我只缺少一个 class (Member),因此只需要一个导入语句。
如果有许多必需的导入语句,则可以构建一个强力 bash exec 将必要的文件合并在一起作为替代方案,直到解决这个问题。
构建一个简单的基于 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 的作曲家。然而,你生成的应用程序无法找到 "Member",显然在生成和构建过程中没有导入 base.cto 文件。 yo 为该网络的模型文件夹中的每个文件生成一个 .ts 文件。对应于 'sample.cto' 的 .ts 文件包含以下内容,但是它缺少 base.cto 文件(位于不同的 .ts 文件中)的抽象定义,并且缺少任何 link 到那个文件。
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 for hyperledger-composer 实现中的一个错误。关于自动修复此问题的任何建议?
注意 如果选择了使用命名空间的 yo 选项,则仅从 sample.cto 生成一个文件。 base.cto 文件不再导致生成 .ts 文件;但是 base.cto 文件中的定义未被使用,应用程序仍然无法加载,因为 base.cto 文件中定义的 Member 缺少抽象定义。
这看起来确实像一个错误。我会调查、创建问题并修复。
在错误修复之前,有一个手动解决方法。那就是将必要的导入语句添加到基础 .ts 文件中——在我的例子中,这将是 org.acme.Z2BTestNetwork.ts 文件。您在目标环境中需要的每个 classes 都需要导入。由于我只缺少一个 class (Member),因此只需要一个导入语句。
如果有许多必需的导入语句,则可以构建一个强力 bash exec 将必要的文件合并在一起作为替代方案,直到解决这个问题。