3. 构建流程
自定义构建流程
纵贯Truffle的发展历史看来,默认构造器并不适合每一个人。它有一些明显的缺点,且相比其它构建系统显得不太成熟。由此,Truffle提供了三种方式,来让你扩展默认的构建系统,但让你能体验到绝大部分的Truffle的特性。
执行外部命令
如果你希望在每次触发构建时,执行一个外部命令。可以在项目的配置中包含一个选项。
module.exports = {
// This will run the `webpack` command on each build.
//
// The following environment variables will be set when running the command:
// WORKING_DIRECTORY: root location of the project
// BUILD_DESTINATION_DIRECTORY: expected destination of built assets (important for `truffle serve`)
// BUILD_CONTRACTS_DIRECTORY: root location of your build contract files (.sol.js)
// WEB3_PROVIDER_LOCATION: rpc configuration as a string, as a URL needed for web3's http provider.
//
build: "webpack"
}
需要注意的是,你需要提供对应的环境变量,来将这些外部的脚本命令集成进Truffle,详见配置中的备注。
提供一个自定义的函数
你可以提供了一个自定义的构建函数。框架给提供给你工程相关的参数,方便你与Truffle进行深度集成。
module.exports = {
build: function(options, callback) {
// Do something when a build is required. `options` contains these values:
//
// working_directory: root location of the project
// contracts: metadata about your contract files, code, etc.
// contracts_directory: root directory of .sol files
// rpc: rpc configuration defined in the configuration
// destination_directory: directory where truffle expects the built assets (important for `truffle serve`)
}
}
创建一个自定义的模块
你也可以通过创建一个模块或对象来实现构建接口(一个包含build
函数的对象,就像上一节中那样)。这适用于需要集成Truffle,但又有自已的发布流程情况。
下面是一个使用默认构建模块的一个例子。
var DefaultBuilder = require("truffle-default-builder");
module.exports = {
build: new DefaultBuilder(...) // specify the default builder configuration here.
}
初始化前端
因为你使用了你自己的构建流程,Truffle不再知道如何初始化你的前端。下面是一个需要做的事清单:
- 引入
Web3
库 - 初始化一个web3的实例,设置一个provider指向到你的以太坊客户端。检查
web3
对象是否已经存在是十分重要的,因为如果有人通过钱包浏览器,比如Metamask或Mist,对象很有可能已存在,这时你应该使用这个对象,而不是初始化一个全新的。查看例子了解更多。 require
或import
编译好的sol.js
文件从./build/contracts
目录。对每个文件需要调用MyContract.setProvider()
来设置provider
。这需要与web3
实例使用provider
是一致的。可以使用web3.currentProvider
来获得当前的provider
。
var MyContract = require("./build/contracts/MyContract.sol.js");
MyContract.setProvider(web3.currentProvider);
使用WEBPACK
我们还在致力于与Webpack的紧密集成。可以通过这里,来沟通你的想法。
如果任何问题,欢迎留言批评指正。
处于某些特定的环境下,可以看到评论框,欢迎留言交流^_^。