external compilers - 外部编译器配置
可以使用外部编译器配置用于以更高级的方式生成Truffle构件, 格式如下:
module.exports = {
compilers: {
external: {
command: "./compile-contracts",
targets: [{
/* compilation output */
}]
}
}
}
当运行truffle compile
时,Truffle将运行配置的命令,并查看targets
指定的合约构件。
应用场景
这个新的Truffle配置项主要用来支持以下的应用场景。
- 编译命令直接生成构件
- 编译命令生成构件元素,truffle生成最终的构件
- 指定合约的属性,truffle生成最终的构件
编译命令直接生成构件
如果编译命令直接生成构件,或者编译输出中包含构件的所有信息,那么可以如下配置:
module.exports = {
compilers: {
external: {
command: "./compile-contracts",
targets: [{
path: "./path/to/artifacts/*.json"
}]
}
}
}
Truffle将执行上述脚本,然后扩展glob(*)并查找列出的目录中的所有.json文件, 并拷贝到build/contracts/目录。
编译命令生成构件元素,truffle生成最终的构件
如果编译命令生成构件的各组成部分,你希望Truffle帮你生成最终的构件,那么可以 配置target来运行任意后处理命令:
module.exports = {
compilers: {
external: {
command: "./compile-contracts",
targets: [{
path: "./path/to/preprocessed-artifacts/*.json",
command: "./process-artifact"
}]
}
}
}
这个配置将为每个匹配的.json
文件运行./process-artifact
。./process-artifact
命令将在stdout输出完整的Truffle构件。
指定合约的属性,truffle生成最终的构件
也可以指定合约的具体属性,然后由Truffle生成构件:
module.exports = {
compilers: {
external: {
command: "./compile-contracts",
targets: [{
properties: {
contractName: "MyContract",
/* other literal properties */
},
fileProperties: {
abi: "./output/contract.abi",
bytecode: "./output/contract.bytecode",
/* other properties encoded in output files */
}
}]
}
}
}
使用workingDirectory
配置项来自定义工作目录。例如,
./proj/compile-contracts
然后读取./proj/output/contract.abi
:
module.exports = {
compilers: {
external: {
command: "./compile-contracts",
workingDirectory: "./proj",
targets: [{
fileProperties: {
abi: "./output/contract.abi",
bytecode: "./output/contract.bytecode",
}
}]
}
}
}