Babelは、WebDeveloperツールセットのすばらしいエントリです。これは素晴らしいツールであり、かなり前から存在していますが、今日ではほとんどすべてのJavaScript開発者がこのツールに依存しています。これは、Babelが不可欠であり、すべての人にとって大きな問題を解決したためです。
この記事では、現在の安定版リリースであるBabel7について説明します。
バベル入門
Babelは素晴らしいツールであり、かなり前から存在していますが、最近ではほとんどすべてのツールが使用されています。JavaScript開発者はそれに依存しており、バベルは今や不可欠であり、誰にとっても大きな問題を解決しているので、これは続くでしょう。
どの問題?
すべてのWeb開発者が確かに抱えている問題:JavaScriptの機能は、ブラウザーの最新リリースで使用できますが、古いバージョンでは使用できません。あるいは、ChromeやFirefoxがそれを実装しているかもしれませんが、SafariiOSとEdgeは実装していません。
たとえば、ES6は矢印機能:
[1, 2, 3].map((n) => n + 1)
これは現在、すべての最新のブラウザでサポートされています。 IE11もOperaMiniもサポートしていません(どうすればわかりますか?ES6互換性テーブル)。
では、この問題にどのように対処する必要がありますか?先に進んで、古い/互換性のないブラウザを使用している顧客を残しておくべきですか、それともすべてのユーザーを満足させるために古いJavaScriptコードを書くべきですか?
バベルを入力してください。バベルはコンパイラ:ある標準で記述されたコードを受け取り、それを別の標準で記述されたコードに変換します。
最新のES2017JavaScriptをJavaScriptES5構文にトランスパイルするようにBabelを構成できます。
[1, 2, 3].map(function(n) {
return n + 1
})
これはビルド時に発生する必要があるため、これを処理するワークフローを設定する必要があります。Webpack一般的な解決策です。
(このすべての場合はPSES混乱しているように聞こえますが、ESバージョンの詳細をご覧くださいECMAScriptガイド)
Babelのインストール
Babelは以下を使用して簡単にインストールできますnpm、プロジェクト内でローカル:
npm install --save-dev @babel/core @babel/cli
過去に私はインストールすることをお勧めしました
babel-cli
グローバルに、しかしこれは現在、バベルのメンテナによって推奨されていません。ローカルで使用することにより、プロジェクトごとに異なるバージョンのバベルを使用でき、リポジトリにバベルをチェックインする方がチームワークに適しているためです。
npmが付属しているのでnpx
、ローカルにインストールされたCLIパッケージは、プロジェクトフォルダーにコマンドを入力して実行できます。
実行するだけでBabelを実行できます
npx babel script.js
Babel構成の例
Babelは、箱から出してすぐに役立つことは何もしません。構成してプラグインを追加する必要があります。
はじめに(すべてのブラウザで矢印関数を使用して)説明した問題を解決するために、次のコマンドを実行できます。
npm install --save-dev \
@babel/plugin-transform-arrow-functions
でパッケージをダウンロードするにはnode_modules
アプリのフォルダを追加する必要があります
{
"plugins": ["@babel/plugin-transform-arrow-functions"]
}
に.babelrc
アプリケーションのルートフォルダにあるファイル。そのファイルをまだ持っていない場合は、空のファイルを作成し、そのコンテンツをそのファイルに入れるだけです。
ヒント:ドットファイル(ドットで始まるファイル)を一度も見たことがない場合、そのファイルは隠しファイルであるため、ファイルマネージャーに表示されない可能性があるため、最初は奇妙な場合があります。
今私たちが持っている場合script.js
このコンテンツを含むファイル:
var a = () => {};
var a = (b) => b;
const double = [1,2,3].map((num) => num * 2);
console.log(double); // [2,4,6]
var bob = {
_name: “Bob”,
_friends: [“Sally”, “Tom”],
printFriends() {
this._friends.forEach(f =>
console.log(this._name + " knows " + f));
}
};
console.log(bob.printFriends());
ランニングbabel script.js
次のコードを出力します。
var a = function () {};var a = function (b) {
return b;
};
const double = [1, 2, 3].map(function (num) {
return num * 2;
});console.log(double); // [2,4,6]
var bob = {
_name: “Bob”,
_friends: [“Sally”, “Tom”],
printFriends() {
var _this = this;
<span style="color:#66d9ef">this</span>.<span style="color:#a6e22e">_friends</span>.<span style="color:#a6e22e">forEach</span>(<span style="color:#66d9ef">function</span> (<span style="color:#a6e22e">f</span>) {
<span style="color:#66d9ef">return</span> <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#a6e22e">_this</span>.<span style="color:#a6e22e">_name</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">" knows "</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">f</span>);
});
}
};
console.log(bob.printFriends());
ご覧のとおり、矢印関数はすべてJavaScriptES5関数に変換されています。
Babelプリセット
前回の記事で、特定のJavaScript機能をトランスパイルするようにBabelを構成する方法を見ました。
プラグインをさらに追加することはできますが、構成機能に1つずつ追加することはできず、実用的ではありません。
これがバベルが提供する理由ですプリセット。
最も人気のあるプリセットはenv
そしてreact
。
ヒント:Babel 7は、次のような毎年のプリセットを廃止(および削除)しました
preset-es2017
、およびステージプリセット。使用する@babel/preset-env
代わりに。
env
プリセット
ザ・env
プリセットは非常に優れています。サポートする環境を指定すると、すべてが実行されます。最新のJavaScript機能をすべてサポート。
たとえば、「すべてのブラウザの最新の2つのバージョンをサポートしますが、Safariの場合は、Safari7以降のすべてのバージョンをサポートしましょう」
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
}
}]
]
}
または「ブラウザのサポートは必要ありません。Node.js6.10インチ
{
"presets": [
["env", {
"targets": {
"node": "6.10"
}
}]
]
}
react
プリセット
ザ・react
プリセットは、Reactアプリを作成するときに非常に便利です。preset-flow
、syntax-jsx
、transform-react-jsx
、transform-react-display-name
。
これを含めることで、JSXトランスフォームとFlowサポートを備えたReactアプリの開発に取り掛かることができます。
プリセットの詳細
https://babeljs.io/docs/plugins/
WebpackでBabelを使用する
最新のJavaScriptをブラウザーで実行する場合は、Babelだけでは不十分であり、コードをバンドルする必要もあります。 Webpackはこれに最適なツールです。
ヒント:webpackガイドwebpackに慣れていない場合
最新のJSには、コンパイル段階と実行時段階の2つの異なる段階が必要です。これは、一部のES6 +機能にポリフィルまたはランタイムヘルパーが必要なためです。
Babel polyfillランタイム機能をインストールするには、
npm install @babel/polyfill \
@babel/runtime \
@babel/plugin-transform-runtime
今あなたのwebpack.config.js
ファイルの追加:
entry: [
'babel-polyfill',
// your app scripts should be here
],
module: {
loaders: [
// Babel loader compiles ES2015 into ES5 for
// complete cross-browser support
{
loader: ‘babel-loader’,
test: /.js$/,
// only include files present in the src
subdirectory
include: [path.resolve(__dirname, “src”)],
// exclude node_modules, equivalent to the above line
exclude: /node_modules/,
query: {
// Use the default ES2015 preset
// to include all ES2015 features
presets: [‘es2015’],
plugins: [‘transform-runtime’]
}
}
]
}
プリセットとプラグインの情報を内部に保持することによりwebpack.config.js
ファイル、私たちは持っていることを避けることができます.babelrc
ファイル。
その他のdevtoolsチュートリアル:
- ヨーマン入門
- ブラウザパッケージマネージャーのBower
- フロントエンドテストの概要
- node-webkitを使用してデスクトップアプリを作成する
- VS Code:言語固有の設定を使用する
- Webpackの紹介
- バベルへの短くて簡単なガイド
- 糸の紹介
- ブラウザDevToolsの概要
- Prettierでコードをフォーマットする
- ESLintでコードをクリーンに保つ
- クールなChromeDevToolsのヒントとコツのリスト
- Jestを使用したJavaScriptのテスト
- VisualStudioCodeの使用方法
- 電子入門
- パーセル、よりシンプルなウェブパック
- HTMLのEmmetリファレンス
- V8JavaScriptエンジン
- VSCodeの構成
- macOSコマンドラインの設定
- ESLintルールを無効にする方法
- コマンドラインからVSCodeを開く方法
- Electronでホットリロードを設定する方法