以太坊Solidity程式語言開發框架————15、構建流程

FLy_鵬程萬里發表於2018-07-14

自定義構建流程

縱貫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,物件很有可能已存在,這時你應該使用這個物件,而不是初始化一個全新的。檢視例子瞭解更多。
  • requireimport編譯好的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的緊密整合。可以通過這裡,來溝通你的想法。

如果任何問題,歡迎留言批評指正。

相關文章