truffle.js是以太坊開發框架truffle的配置文件,本手冊介紹truffle.js 配置文件的位置、windows下的命名衝突解決方案以及各類配置選項。html
若是你但願立刻開始學習以太坊DApp開發,能夠訪問匯智網提供的出色的在線互動教程:git
truffle項目的配置文件位於項目的根目錄下,名稱爲truffle.js。這個文件是一個Javascript腳本,能夠在其中執行任意 必要的代碼來建立適合你的配置。truffle.js必須導出一個表徵你的項目配置的對象,例如:github
module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" // 可匹配任意網絡 } } };
在這個建立truffle項目時生成的默認配置文件中,聲明瞭一個名爲development
的以太坊節點,該節點在地址127.0.0.1:8545
監聽。web
在Windows命令行使用truffle時,默認的配置文件名與truffle衝突 —— 當你在命令行輸入truffle時,windows實際上會調用項目目錄下 的配置腳本truffle.js。json
能夠有幾種方法解決這一衝突:windows
D:\ez-dapp> truffle.cmd compile
.js
後綴從可執行後綴中刪除。truffle-config.js
。指定在部署合約、發送交易時使用哪一個網絡節點。當在某個特定的網絡節點上編譯或部署合約時,合約會緩存起來方便後續使用。 當truffle的合約抽象層檢查到你連到某個網絡節點時,它會使用這個這個網絡節點上原有的緩存合約來簡化部署流程。緩存
下述的networks對象,經過一個網絡名作爲配置的鍵,值對應定義了其網絡參數。networks的對應選項不是必須的,但若是一旦指定, 每一個網絡必須定義一個對應的network_id。若是但願聲明一個默認網絡,能夠經過將netword_id的值標記爲default來實現, 當沒有匹配到其它的網絡時,就會使用默認網絡。須要注意的是整個配置中,應該有且僅有一個default的網絡。通常來講, 默認網絡主要用於開發,配置,合約等數據沒有長期保存的須要,網絡ID也會因TestRPC的重啓而頻繁改變時。網絡
網絡節點名稱在經過用戶接口調用時使用。例如,在部署合約時使用--network
選項指定要使用的網絡節點:app
$ truffle migrate --network live
live
是truffle.js中定義的某個網絡節點:框架
networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" // match any network }, live: { host: "178.25.19.88", // Random IP for example purposes (do not use) port: 80, network_id: 1, // Ethereum public network // optional config values: // gas // gasPrice // from - default address to use for any transaction Truffle makes during migrations // provider - web3 provider instance Truffle should use to talk to the Ethereum network. // - function that returns a web3 provider instance (see below.) // - if specified, host and port are ignored. } }
對於每個配置的網絡節點,在未明確設置如下交易參數時,使用其默認值:
new Web3.providers.HttpProvider("http://host:port")
對於配置的每一個網絡節點,你能夠設置provider或host/port,但不能同時使用。若是你須要一個 HTTP provider,推薦使用host/port選項,若是須要一個定製的provider,例如HDWalletProvider, 那麼必須使用provider選項。
合約編譯的默認輸出目錄是項目根目錄下的./build/contracts,不過這一點能夠在配置文件中 使用contracts_build_directory配置項進行修改。
例如,你能夠將合約編譯結果存放在項目根目錄的./output/contracts目錄下:
module.exports = { contracts_build_directory: "./output", networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*", } } };
編譯生成的合約構件也能夠不放在項目目錄下,例如:
module.exports = { contracts_build_directory: "../../../output", networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*", } } };
固然你也可使用絕對路徑,不過咱們不推薦這麼作,由於若是在其餘機器上 構建你的項目,可能會找不到你設定的絕對路徑。若是在windows下使用絕對 路徑,記得轉義反斜槓,例如: C:\\Users\\Username\\output
。
使用mocha選項傳入MochaJS測試框架須要的配置選項,例如:
mocha: { useColors: true }
關於mochajs的配置內容,請查閱其官方文檔。
使用solc選項傳入solity編譯器須要的選項,例如:
solc: { optimizer: { enabled: true, runs: 200 } }
關於solidity編譯器選項的詳細內容,請查閱編譯器輸入與輸出的JSON描述。