Open hysryt opened 7 years ago
Browserifyの項目を参照 https://github.com/hysryt/wiki/issues/13#issuecomment-342782771
https://babeljs.io/docs/en/babel-preset-env
ブラウザを指定でき、必要最低限のトランスパイルのみ行うことができるプリセット。
ジェネレータ関数や非同期関数の変換には regenerator-transform を使用している。
吐き出されたコードは regenerator-runtime が必要となる。
Babel はバンドルしてくれないため、別途 regenerator-runtime を npm install
して webpack や rollup などでバンドルする必要がある。
ジェネレータ関数や非同期関数をES5に変換するための処理のモジュール Babel用プラグインとして作られている?
https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-regenerator Babelにジェネレータ関数や非同期関数の変換機能を付け加えるプラグイン。 中身は regenerator-transform。
regenerator-transformによって変換されたコードを動作させるためのランタイム(関数、オブジェクト群)。
https://github.com/facebook/regenerator/tree/master/packages/regenerator-transform ジェネレータ関数や非同期関数を変換するソフトウェアで、内部でBabelを使用している。 regenerator-runtimeをバンドルするオプションもあるが、オプションでの明示的な指示が必要であり、ランタイムを含めるべきかどうかを自動で判定してくれる機能はない。 Babelの設定が必要ないので楽な面もある。
変換するソースによっては別途モジュールが必要になるためである。 たとえばasync関数をES5に変換する場合、regeneratorのランタイムライブラリが必要になる。 ほかにもPromiseをES5に変換する場合、core-jsのポリフィルが必要となる。 これらを結合するためにモジュールバンドラが必要となる。
もしBabelの段階でモジュールをファイルに埋め込む場合、ファイルごとにランタイムやポリフィルが増えてしまう。 Babelの段階ではモジュールは組み込まず、モジュールバンドラーの段階で一つだけランタイムやポリフィルを結合することで無駄がなくなる
babel.config.js
.browserslistrc
プリセットやプラグインには loose
オプションを持つものが存在する。
loose
をオンにした場合、仕様よりも実行時の速度やコードの単純さを重視したコードに変換される。
仕様を重視したい場合は loose
をオフにする。
基本的にはオンにしても問題はなさそう。
デフォルトは false
。
true
を設定した場合、target
の値に関係なく常に変換を行う。
次は BABEL_ENV が production の時に常に変換を行う設定となる。
forceAllTransforms: api.env("production")
https://babeljs.io/docs/plugins
パース => 変換 => ファイル生成 変換部分の処理はプラグイン(上の例では
@babel/preset-env
)として別モジュールで配布される 公式のプリセット(プラグインのセット)は以下の種類がある