FAQ
なぜ`for...of`の出力はこんなに冗長で醜いのですか?
仕様に準拠するため、イテレータのreturnメソッドはエラー時に呼び出される必要があります。代替手段として、Babel 7.13で導入されたassumptions(`ArrayLikeIsIterable`や`IterableIsArray`など)を使用する方法がありますが、assumptionsを使用する場合には**多くの**注意点があり、仕様に準拠しないことを意図的に選択していることにご注意ください。
詳細は、babel/rfcs#5、google/traceur-compiler#1773、babel/babel#838をご覧ください。
なぜアロー関数で`this`と`arguments`が再マッピングされるのですか?
アロー関数は通常の関数と**同義ではありません**。アロー関数内の`arguments`と`this`は、例えば、その**外側の関数**を参照します。
const user = {
firstName: "Sebastian",
lastName: "McKenzie",
getFullName: () => {
// whoops! `this` doesn't actually reference `user` here
return this.firstName + " " + this.lastName;
},
// use the method shorthand in objects
getFullName2() {
return this.firstName + " " + this.lastName;
},
};
詳細は、babel/babel#842、babel/babel#814、babel/babel#733、babel/babel#730をご覧ください。
なぜ`this`が`undefined`に再マッピングされるのですか?
Babelは、すべての入力コードがES2015モジュールであると想定しています。ES2015モジュールは暗黙的にstrictモードであるため、トップレベルの`this`はブラウザでは`window`ではなく、ノードでは`exports`でもありません。
この動作を望まない場合は、plugin-transform-modules-commonjsで`strict`を無効にするオプションがあります。
**注意:** これを行うと、意図的に仕様から逸脱することになり、将来の相互運用性の問題を引き起こす可能性があります。
助けて!Babelを5.xのように使いたいだけです!今はすべてが複雑すぎます!
お気持ちは分かります!Babel 6を始めるには、少しの設定が必要です。私たちはこれが最善だと考えています。移行を容易にするためにプリセットを追加しました。
Babel 5.xからBabel 6へのアップグレード
Babel 6の中心はプラグインです。必要なプラグインは、具体的な構成によって異なりますが、Babel 5と同じ変換をすべて取得するには、次の設定ファイルを追加するだけです。
{
"presets": ["env", "react", "stage-2"]
}
- npm
- Yarn
- pnpm
npm install babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev
yarn add babel-preset-env babel-preset-react babel-preset-stage-2 --dev
pnpm add babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev
また、ブログ記事Babel 6のセットアップもご覧ください。
ドキュメントはどこに行ったのですか?
Babel 6では、プラグインを優先して多くのオプションが削除されているため、多くのドキュメントが適用されなくなりました。
削除されたオプションごとに、対応するプラグインがあるはずです。何か見落としがあると思われる場合は、issueを作成してください!
Babelはオープンソースプロジェクトであり、私たちはあらゆる貢献を歓迎します。可能であれば、babel.github.ioリポジトリにプルリクエストを送信して、ドキュメント作成にご協力ください。
ソースからbabelをビルドするにはどうすればよいですか?
ビルド手順をご覧ください。
Babelに貢献するにはどうすればよいですか?
貢献ガイドをご覧ください。
構文エラー/予期しないトークンが発生するのはなぜですか?
その機能をサポートするプラグイン/プリセットが含まれていない可能性が最も高いです。(パーサーのバグ、または実際に構文エラーである可能性もあります)。
なぜ特定のbabel-xパッケージが更新されないのですか?
現在、Lernaの固定バージョン管理システムを使用しています。
すべてのパッケージにグローバルバージョンがあります。リリースを行う場合、実際に変更があったパッケージのみが更新されます(そのフォルダで`git diff`を実行します)。
`babel-plugin-transform-exponentiation-operator`のみを6.x.xに更新する場合、他の依存関係は`^`を使用しているため、現在、すべてのパッケージの新しいバージョンは公開していません。
たとえば、Babelのv6.6.0リリースは、すべてのパッケージが6.6.0になったことを意味するわけではありません。
最新のパッケージバージョンを使用していることを確認するには、`node_modules`を削除して`npm install`を再度実行する必要がある場合があります。