TruffleでES6構文を使えるようにする
はじめに
Truffleでスマートコントラクト開発をする際
テストやバックエンドサーバーの実装にはNodoJSをよく使うのですが
デフォルトだと最新のECMAcriptに対応していないのでBabelを導入します。
毎回やり方を忘れてしまうので、導入手順をメモとしてまとめておきます。
環境
truffleはインストール済みで、truffleプロジェクトディレクトリ内で作業する前提です。
- macOS Catalina 10.15.2
- node : v11.14.0
- npm : 6.7.0
- Truffle : v5.1.2
手順
必要なbabel関連モジュールのインストール
$ npm i babel-preset-env babel-register babel-polyfill
.babelrcを作成
$ touch .babelrc
truffleプロジェクトディレクトリ直下に.babelrc
ファイルを作成します。
.babelrc
{ "presets": ["env"] }
truffle-config.jsでbabel-register, babel-polyfillをrequire
truffleプロジェクトのの設定ファイルであるtruffle-config.js
の先頭行にrequire
を挿入します。
truffle-config.js
require('babel-register') require('babel-polyfill')
これでimport/exportなどの構文をTruffleのテストスクリプトなどで使えるようになります。
babel モジュールの説明
babelモジュールたちが何をしているのか知らなかったのでググりました。
babelとは
JavaScriptはECMAScriptと呼ばれる標準によって定められた仕様にしたがって実装されています。
現在はes6(es2015以降のもの)と呼ばれる6番目のバージョンが主流となっているのですが、
各ブラウザでは実装されていない仕様が多くあります。
また、Nodejsで実行する際にもバージョンによって実行できる仕様が異なります。
babelはそのような新しい世代のJavascriptの標準仕様を古い実行環境でも使えるようにしてくれるトランスコンパイラです。
babel-preset-env
環境に合わせたトランスパイル(ある言語で書かれたコードを元に別の言語のコードを生成する)を行うプリセット 実行環境に応じてtranspileが必要な構文のpresetモジュールを自動でロードしてくれる。
babel-polyfill
babel-polyfill Polyfillはある機能をサポートしていないブラウザ上でその機能を実装するための小さいライブラリ群。構文だけでなくPromiseなどの新しい機能を実装可能にする。
babel-register
node.jsのrequire文をフックして、ファイルを読み込む直前にbabelでトランスパイルする
最後に
2年前くらいからこの方法でやってるけど
最近だともっといいやりかたあるかも
参考
【5分でなんとなく理解!】Babel入門 babel-preset-envで環境に合わせてJavaScriptをトランスパイルする