Babel 設定ファイル #2
Babel 設定ファイル
Babelの設定ファイルとは、BabelでどのようにJavaScriptを変換するかを定義したもの。
設定ファイルの作成
Babelの設定ファイルはプロジェクトのルート(package.jsonがある場所)に
babel.config.json
というファイルを作成するだけで、このファイルが設定ファイルとして扱われる。
設定ファイルの種類や、作成方法はいくつかあるが
Babelがとりあえずオススメしてるのはbabel.config.json
を作成すること。
(※設定ファイルの拡張子は.json
以外にも、.js
、.cjs
、.mjs
が使用可能)
設定ファイルの中身
babel.config.json
{ "presets": [...], "plugins": [...] }
babel.config.js
module.exports = function (api) { api.cache(true); const presets = [ ... ]; const plugins = [ ... ]; return { presets, plugins }; }
設定ファイルには基本的に使用するpresets
やplugins
などを定義するが
.js
の場合はプログラムが書けるので、設定内容を動的に作る事もできる。
その他の設定については公式ドキュメントを参照
設定ファイルの種類
Babelの設定ファイルは大きく以下の2種類がある
プロジェクト全体設定
babel.config.json
ファイル関連設定
.babelrc.json
package.json
にbabel
というキーを指定して定義
プロジェクト全体設定
プロジェクトルートに置かれたbabel.config.json
はプロジェクト全体の設定として扱われる。
また拡張子を変えてbabel.config.json
とbabel.config.js
の2つを作成すると
コンパイル時に
Error: Multiple configuration files found. Please remove one:
と怒られる。
プロジェクト全体設定は1つしか設定できないようだ。
ファイル関連設定
ファイル関連設定はプロジェクトの一部にだけ適用する事ができる設定ファイルで
.babelrc.json
という名前で作成すればよい。
例として
root ┣ src ┃ ┣ index.js ┃ ┗ hoge ┃ ┣ hoge.js ┃ ┗ .babelrc.json ┣ package.json ┗ babel.config.json
このような構成だった場合、プロジェクト全体にはbabel.config.json
で定義した設定が適用されるが
root/src/hoge
に含まれるファイルは.babelrc.json
に定義された設定が追加で適用される。
適用された設定を表示する
ファイルパスを指定して、そのファイルに適用されたBabelの設定を表示する事ができる。
babelでコンパイルを行う前に環境変数BABEL_SHOW_CONFIG_FOR
に対して
設定を表示したいファイルのパスを設定する。
例えば、src/index.js
に適用された設定を表示する場合
$env:BABEL_SHOW_CONFIG_FOR = "./src/index.js"; npx babel src --out-dir lib
↓結果
Babel configs on "D:\Users\owner\Desktop\work\babel-sample\src\index.js" (ascending priority): config D:\Users\owner\Desktop\work\babel-sample\babel.config.json { "plugins": [ "@babel/plugin-proposal-class-properties" ], "presets": [ [ "@babel/env", { "targets": { "edge": "17", "firefox": "60", "chrome": "67", "safari": "11.1" }, "useBuiltIns": "entry", "corejs": "3.6.4" } ] ] } programmatic options from @babel/cli { "sourceFileName": "../src/index.js", "caller": { "name": "@babel/cli" }, "filename": "src\\index.js" } Successfully compiled 1 file with Babel (441ms).
次に、./src/hoge.hoge.js
に適用された内容を表示する場合
$env:BABEL_SHOW_CONFIG_FOR = "./src/hoge/hoge.js"; npx babel src --out-dir lib
↓(結果)
Babel configs on "D:\Users\owner\Desktop\work\babel-sample\src\hoge\hoge.js" (ascending priority): config D:\Users\owner\Desktop\work\babel-sample\babel.config.json { "plugins": [ "@babel/plugin-proposal-class-properties" ], "presets": [ [ "@babel/env", { "targets": { "edge": "17", "firefox": "60", "chrome": "67", "safari": "11.1" }, "useBuiltIns": "entry", "corejs": "3.6.4" } ] ] } config D:\Users\owner\Desktop\work\babel-sample\src\hoge\.babelrc.json { "plugins": [ "@babel/plugin-proposal-class-properties" ], "presets": [ [ "@babel/env", { "targets": { "edge": "17", "firefox": "60", "chrome": "67", "safari": "11.1" }, "useBuiltIns": "entry", "corejs": "3.6.4" } ] ] } programmatic options from @babel/cli { "sourceFileName": "../../src/hoge/hoge.js", "caller": { "name": "@babel/cli" }, "filename": "src\\hoge\\hoge.js" }
./src/index.js
にはbabcl.config.json
の内容しか表示されないが
./src/hoge/hoge.js
には、.babelrc.json
の内容も表示される。
Babelは複数の設定ファイルがあった場合は、元の項目を上書き(マージ)するらしい。
babel.config.json
の内容が、.babelrc.json
によって上書きされる。