github.com
をtruffle testで使うための導入方法20180417版です。
y-nakajo.hatenablog.com
こちらの以前の記事で紹介していた手順が最新のbabelでは使えなくなっていたので、最新版のbabelに対応した導入手順をまとめ直しました。
truffleでimport/exportなどのes2015構文を使えるようにする
理由
lk-test-helpersはes2015構文で記述されています。
lk-test-helpersのproject設定ではこれらes2015の構文をtranspileし、現在のnode.jsでも実行可能なソースを生成するbuild scriptが準備されています。
しかし、npm installで落ちてくるmoduleにはbuildした結果のファイルが含まれていません。
そのため、lk-test-helpersを使うにはtruffleでimport/export等のes2015構文を使える様にする必要があります。
ということで、es2015構文を使うための環境を構築します。
これ以降の手順は、truffleはすでにインストール済みであり、何らかのtruffle projectのディレクトリ内で作業する前提です。
必要なbabel関連モジュールのインストール
lk-test-helpersもついでにインストールします。
npm i babel-preset-env babel-register babel-polyfill lk-test-helpers
truffle.jsでbabel-register, babel-polyfillをrequire
truffle.js (truffle-config.jsを使っているならtruffle-config.js)の先頭行に次のコードを挿入します。
require('babel-register')({ // This will override `node_modules` ignoring - you can alternatively pass // an array of strings to be explicitly matched or a regex / glob ignore: /node_modules\/(?!lk-test-helpers)/ }); require('babel-polyfill')
lk-test-helpersを使いたいtestファイルの中でimport
importは次の様に書けばOKです。この例では全部のメソッドをロードしてます。
import lkTestHelpers from 'lk-test-helpers/src/main.js' const { advanceBlock, advanceToBlock, assertJump, ether, latestTime, increaseTime, increaseTimeTo, EVMThrow, expectThrow, hashMessage, timer, toPromise, transactionMined } = lkTestHelpers(web3)
これで、lk-test-helpersの各種便利メソッドが無事使える様になりました。
babel モジュールの説明
今回利用したbabelモジュールの役割を説明します。
babel-polyfill
構文だけじゃなくて機能(Promiseとかなんかそういうクラスとか)も必要があればtranspileするためのモジュールです。
babel-register
requireにhookしてtranspileしてくれるモジュールです。最新のバージョンでは./node_modules以下がデフォルトで対象外に設定されていたため、これを入れてもlk-test-helpersのimportがずっと構文エラーになってしまい、はまりました。
babel-registerの公式ドキュメントをみたらignoreの設定方法が載ってました。
babel-preset-env
昔のbabelではesのどの構文に対応するのかはbabel-preset-{*}でかくフェーズごとに細かく分かれていました。で、このbabel-preset-envはその名の通り、実行環境に応じてtranspileが必要な構文のpresetモジュールを自動で宜しくpreset時にロードしてくれるモジュールです。
現在ではとりあえずこれさえ入れとけばOKみたいな感じです。
感想
ECMA Script、 Node.jsはこのbabel周りのあれこれがいつもハマりどころですね。。。async/await使えるけどimport使えなかったりとか、なんかもうほんとよくわからない。