プラグイン
Babelのコード変換は、プラグイン(またはプリセット)を設定ファイルに適用することで有効になります。
プラグインの使用
プラグインがnpmにある場合、プラグインの名前を渡すと、Babelはそれがnode_modules
にインストールされていることを確認します。これは、配列を受け取るplugins設定オプションに追加されます。
{
"plugins": ["babel-plugin-myPlugin", "@babel/plugin-transform-runtime"]
}
プラグインへの相対パス/絶対パスを指定することもできます。
{
"plugins": ["./node_modules/asdf/plugin"]
}
プラグインまたはプリセットのパス設定の詳細については、名前の正規化を参照してください。
変換プラグイン
これらのプラグインは、コードに変換を適用します。
変換プラグインは対応する構文プラグインを有効にするため、両方を指定する必要はありません。
構文プラグイン
ほとんどの構文はBabelによって変換可能です。まれなケース(変換がまだ実装されていない場合、またはデフォルトの方法がない場合)では、@babel/plugin-syntax-bigint
などのプラグインを使用して、Babelが特定の種類の構文を**解析**できるようにするだけにすることができます。または、Babelにコード解析またはコードモッドのみを実行させたい場合は、ソースコードを保持したい場合があります。
対応する変換プラグインが既に使用されている場合は、構文プラグインを指定する必要はありません。変換プラグインが自動的に有効にするためです。
あるいは、Babelパーサーのplugins
オプションを指定することもできます。
あなたの.babelrc
{
"parserOpts": {
"plugins": ["jsx", "flow"]
}
}
プラグインの順序
プラグインの各ビジターにとって、順序は重要です。
これは、2つの変換が両方とも「Program」ノードにアクセスする場合、変換はプラグインまたはプリセットの順序で実行されることを意味します。
- プラグインはプリセットの前に実行されます。
- プラグインの順序は最初からです。
- プリセットの順序は逆です(最後から最初)。
例えば
{
"plugins": ["transform-decorators-legacy", "transform-class-properties"]
}
は、transform-decorators-legacy
を実行してからtransform-class-properties
を実行します。
プリセットでは、順序が*逆*であることを覚えておくことが重要です。以下
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
は、次の順序で実行されます:@babel/preset-react
、次に@babel/preset-env
。
プラグインオプション
プラグインとプリセットの両方で、設定内の配列に名前とオプションオブジェクトをラップすることでオプションを指定できます。
オプションを指定しない場合、これらはすべて同等です
{
"plugins": ["pluginA", ["pluginA"], ["pluginA", {}]]
}
オプションを指定するには、キーをオプション名として使用したオブジェクトを渡します。
{
"plugins": [
[
"transform-async-to-module-method",
{
"module": "bluebird",
"method": "coroutine"
}
]
]
}
プリセットのオプションの設定はまったく同じです
{
"presets": [
[
"env",
{
"loose": true,
"modules": false
}
]
]
}
プラグイン開発
独自のプラグインを作成する方法については、優れたbabel-handbookを参照してください。
名前を逆にするシンプルなプラグイン(ホームページから)
export default function() {
return {
visitor: {
Identifier(path) {
const name = path.node.name;
// reverse the name: JavaScript -> tpircSavaJ
path.node.name = name
.split("")
.reverse()
.join("");
},
},
};
}