3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

福岡明太子クラブAdvent Calendar 2019

Day 3

Babelの基本的な使い方

Posted at

何をするツール?

JSコードを別の形のJSコードに変換するツールです。

  • 新しい文法を使って書かれたコードを古い文法を使うコードへの変換
  • ブラウザーが準拠していないAPIを使うためのpolyfillへの変換
  • コードの最適化
    など、様々な用途に使えます。

使い方

babelにはコア機能を提供する@babel/coreパッケージと、それをターミナルから操作するための@babel/cliがあります。
まずはこれらをインストールします。
yarn add @babel/core @babel/cli
そして、以下のようにしてbabelを実行します。
./node_modules/.bin/babel src --out-dir dist
上の例だと、srcがソースディレクトリでdistが変換したコードを出力するディレクトリです。

試しに以下のmain.jsを古いブラウザでも動くように変換して見ようと思います。

const addOne = (x) => x + 1;
console.log(addOne(2))

変換する前に、babelに変換ルールを設定する必要があります。今回は「古いブラウザでも動かせるようにする」という目的の下、設定を書きます。
以下の設定は公式サイトのチュートリアルで使用されている設定です。

const presets = [
  [
    "@babel/preset-env",
    targets: {
      edge: "17",
      firefox: "60",
      chrome: "67",
      safari: "11.1",
      ie: '16'
    },
    useBuiltIns: "usage"
  ]
];
module.exports = { presets };

1つずつ解説していきます。
babelの変換ルールはpluginと呼ばれ@babel/plugin-のような名前のpackageとして提供されます。そして、それらのpluginをまとめたものがpresetsです。
上の例では@babel/preset-envをというpresetsを使っています。
preset-envはアロー関数などの比較的新しいJSの文法を古いバージョンのブラウザでも動作するように変換するpluginをまとめたものです。targetsに渡しているオブジェクトはJSを動作させるブラウザの最低バージョンです。つまり、edgeの17以上やfirefoxの60以上で動くようにコードは変換されます。
useBuiltinsはpolyfillをどのように扱うかのオプションです。
詳しい事は省略しますが、"usage"を指定するとpolyfillが必要なコードが含まれているファイルに、apiを含んだモジュールのimport文を挿入してくれます
./node_modules/.bin/babel main.js --out-dir distを実行するとdist/main.jsというファイルが作成されます。中身はこんな感じです。

"use strict";

var addOne = function addOne(x) {
  return x + 1;
};

console.log(addOne(29));

変数addOneに代入しているアロー関数が、functionキーワードを使って定義された関数に変換されている事が分かります。

参考資料

Babel

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?