babel-preset-stage-0、babel-preset-stage-1などの違いは何ですか?


126

違いは何ですか:私の質問はbabel-preset-stage-0babel-preset-stage-1babel-preset-stage-2そしてbabel-preset-stage-3、そして我々が開発し、最良の選択肢は何ですかES6

回答:


97

Babelのステージプリセットは、TC39プロセスと、潜在的な言語変更に対する各提案のさまざまな状態に相当します。それらには、その段階で提案されたすべての変更の実装とポリフィルが含まれます。

現在入っているものStage-0は、Strawmanであり、 ES6 ではありません。これは将来のJavascriptであり、公式のECMAScript仕様に組み込まれることは絶対にありません。

これがもたらす影響を理解せずに機能するstage-0ように、に設定しないでください。

ES6機能のみを含むBabelプリセットは preset-es2015


3
どうstage-1ですか?安全に使用できますか?一部のstage-1機能は廃止され、APIは将来変更される可能性がありますか?
notgiorgi

4
@notgiorgi 変更または完全な非推奨よりも安全ですstage-0が、決して完全に安全ではありません(ステージ1の後に取り下げられた呼び出しコンストラクターの提案を参照)。しかし、ステージ4以外のすべてのステージ(つまり、終了)についても同じことが言えます。
CodingIntrigue 2016年

ノード6以降を実行している場合はpreset-es2015babel-preset-node6これらの日に置き換えることができます。
デイブサグ2017年

5
さらに良いbabel-preset-envことに、どの環境でもターゲットにできます!
CodingIntrigue 2017年

5
Guyz babel-preset-envINSTEAD OFを使用してくださいbabel-preset-es2015babel-preset-es2015ほぼ時代遅れです
ビジェイ2018年

53

主に他の回答で詳しく説明したように。ステージ4は最も安定しており、ステージ0は最も危険です。これは、以前の回答とドキュメントからの5つの段階の高レベルの内訳です。これを追加したのは、これにたどり着いたとき、各ステージが何であるかについてより高レベルの内訳を期待していたからです。


ステージ4:終了

ECMAScript標準に含める準備ができており、テストに合格し、次のリビジョンの一部になります


ステージ3:候補者

完全な仕様のテキストが含まれ、主にテストされ、フィードバックが提供されているプラ​​グインが含まれています。ソリューションは完全であり、それ以降のすべての変更は実装経験に基づいています。


ステージ2:ドラフト

プラグインのさらなるサポートは可能な限り完了しました。これらの要件は主に、途中の段階的な変更のみで満たされます。セマンティクスとAPIは完全であることが期待されています。それはおそらく仕様の一部になるでしょう。


ステージ1:提案 このフェーズで調査され、発見され、選択されたコンセプトは、主にポリフィルとデモが期待されます。


ステージ0:ストローマン TC-39によると、この名前は私を笑わせましたが、それは一種の束縛はありませんが、コンテキストを考えると、フォローアップまたは調査のために選択されていないコンセプトのカテゴリです。

各レベルは包括的ですが、4には3が含まれ、2には2などが含まれます。この合計が将来誰かを助けることを願っています。


15

ステージは、TC39プロセスで定義されたステージを表します。TC39プロセスは、クレイジーだが便利なアイデアから、ES6などの受け入れられた標準に機能を組み込みます。すべてのコーナーケースについて議論、検討、テスト、ポリフィル、さらに議論などを行う必要があるため、プロセスには時間がかかります。つまり、標準化団体です。目標は、「ES6」と言うことは、「ES5」と同じように完全かつ完全な意味を持つことです。

実際には、プロジェクトの要件は、実証済みの状態に留まることから、あいまいな場合でも非常に便利な言語機能をいじくり回すことまでさまざまです。あなたはおそらくこれらのリンクから始めたいでしょう:

  • TC39プロセスの概要:これには、ステージの意味と機能がステージ間でどのように進行するかに関する気の利いたチャートが含まれます。その下はTC39の概要です。

  • アクティブなプロポーザル:特定のプロポーザルがどの段階にあるかについての簡単な概要。完成したプロポーザル、非アクティブなプロポーザル、ステージ0のプロポーザルへのリンクも含まれています。2017年4月、パブリッククラスフィールドはステージ2にあります。つまり、正確に記述され、レビュー担当者が割り当てられていますが、完全にはレビューされていません。

  • ステージ3のバベルプリセットパッケージ:すべてのステージ3提案用の、GitおよびNPMへのリンクを含むプラグインページ。基本的に、このプラグインは、理論的にはTC39ステージ3で現在の提案をポリフィルするパッケージのコレクションを取り込みます。実際には、バグが発生する可能性があります。また、同様に、ステージ2以下のプラグインページにリンクしています。これらのページは、ステージ3の提案と不安定な提案の両方を含むパッケージにリンクします。

  • Babelプリセット 'env':このBabelプリセットは、完成した提案をサポートし、既知の環​​境でこれらの機能をサポートするために必要な正しいパッケージを選択します。たとえば、ローカルのnode実行可能ファイルに必要なプラグインは、古いブラウザよりも少ないです。承認された将来の機能をサポートする「stage-4」プラグインと考えることができます。

要約すると、これらのプレリリース機能を使用する場合にのみ、それらを処理する必要があります。それらを使用する必要がある場合は、必要なものがあるステージの最大数を選択してください。クレイジーな機能を備えたおもちゃのインスタレーションでウォータークーラーについて議論したい場合は、ステージ0に進んでください。


おかげで、babel-envはbabel-recommanded-configurationの一種です
Webwoman

4

これは、理解するのに最適な出発点です。バベルプリセットとは

リンクからの抜粋:

ステージ0-Strawman:ただのアイデア、可能なBabelプラグイン。
ステージ1-提案:これは取り組む価値があります。
ステージ2-ドラフト:初期仕様。
ステージ3-候補:完全な仕様と初期ブラウザ実装。
ステージ4-終了:次の年次リリースに追加されます

全体像

  1. 時が経つにつれ、JavaScriptは進化し、ますます多くの機能が言語に追加されています。
  2. また、ブラウザーは、これらの新機能を実装してブラウザーが理解できるようにするために、多くの作業を行う必要があります。このプロセスは一般に、Javascriptが進化しているペースよりもはるかに低速です。
  3. しかし、開発者は、コードの記述、理解、維持を容易にするため、言語の新機能を使用したいと考えています。
  4. そのため、開発者は新しいJavascript機能を使用してコードを記述しますが、そのコードがブラウザーに到達する前に、いくつかの魔法を使用して、新しい機能を持つすべてのコードをブラウザーが理解できるコードに変換するビルドプロセスを実行します。つまり、JavaScriptの新機能ですが、ブラウザの理解可能な言語構造を使用してコーディングされています。
  5. ビルドマジックは、ツールの1つであるBabelを使用して実行できます。
  6. Babelが機能する方法は、プラグインのセットを取ることです。これらのプラグインはそれぞれ、Javiscriptの特定の新機能をブラウザが理解できる言語の構成に変換することを指します。
  7. そのようなプラグインは何百もあり、それぞれがJavascriptのさまざまな新機能を参照しています。これらの機能は、最終的なJavaScript仕様の一部である場合とそうでない場合があります。そして、最終的にJavascript仕様に移行しない場合、どのブラウザーもこの機能を実装しません。そのため、開発者がbabelプラグインを使用してJSの実験的な機能を使用する場合、そのリスクは彼/彼女が引き受けます。仕様に収まらない場合は、ブラウザにデプロイする前に、コードのその部分を常に変換する必要があります。
  8. このリスクはさまざまなレベルに分類され、機能が最終仕様に到達する可能性を示します。
  9. また、babelはこれらのプラグインをさまざまなセットにグループ化しました。これらpresetはbabelの用語で呼ばれます。そして、各プリセットには、さまざまなレベルのリスクからのプラグインが含まれています。
  10. preset-0これは、非常に実験的な機能のプラグインがあり、最終的な仕様に達するリスクが高いことを意味します。これは、Javascriptに特定の機能が必要であると開発者に思いついたアイデアのようなもので、彼はそれをTC-39プロポーザルプロセスに組み込むためにいくつかの作業を行いました。
  11. preset-1 TC-39が受け入れた機能のアイデアのプラグインが含まれており、彼らは作業する価値があると考えています。
  12. preset-2初期ドラフトが機能の準備ができている機能のプラグイン。そして、それは続きます。

そのため、ステージ0の機能がしばらくしてステージ2に達し、しばらくしてからJavascriptの次のリリースに入る可能性があります。

したがって、これらのBabelプリセットのバージョンごとに、プラグインの異なるセットを見つけることができます。また、ステージ0の機能にいくつかの変更が加えられ、機能の動作に重大な変更が加えられた可能性もあります。そして、それは到達しました。まったく異なるAPIを備えたステージ2としましょう。したがって、開発者は、これらのプラグインを更新するときに、コードに必要な変更を加える必要があります。


3

元の質問は「babel-preset-stage-0、babel-preset-stage-1、babel-preset-stage-2、およびbabel-preset-stage-3の違いは何ですか」ですが、「違い」に焦点を当てて答えるのは奇妙ですTC39ステージ0とステージ1の間にある用語。バベルのサイトから引用するには:

Babelプリセットは、プラグインの共有可能なリストです。

公式のBabel Stageプリセットは、JavaScriptでの新しい構文提案のTC39ステージングプロセスを追跡しました。

各プリセット(ステージ3、ステージ2など)には、その特定のステージとその上のプラグインがすべて含まれています。たとえば、ステージ2にはステージ3が含まれます。

核となる考えは「その上のもの」です。上記の答えはその部分で非常に良いので、私は後半には答えません。


-20

わかった。あなたたちはhttps://babeljs.io/docs/plugins/preset-stage-0/を参照することができます

一言で言えpreset-stage-0ば、preset-stage-1持ってpreset-stage-1いるすべての機能が含まれ、持って いるすべての機能が含まれていますpreset-stage-2...

数字が小さいほど強力です。あなたのプロジェクトで、問題に煩わされたくない場合は、設定してくださいstage-0...


15
しかしstage-0、実際に等が何であるかを理解していますか?「数字が小さいほど強力だ」とおっしゃっていますので、そうではないと思います。
フェリックスクリング、

2
実際、私はと混同しstageましたES6、@ RGrahamはそれを指摘しました The Babel Preset which contains only ES6 features is preset-es2015。ありがとう!
flyingzl 2016年

後で問題が発生したい場合は、ステージ0を使用してください!ステージ0機能の一部またはすべてが、ES仕様にまったく含まれない場合があります。したがって、stage-0機能の使用には注意してください。
devsnd 2016年

なぜこの回答がそれほど反対票が投じられたのかわかりません。彼の言ったことは正しい。TC39ステージ0は基本的に非常に信頼できない提案です。彼らは最終的な提案をするかもしれないし、しないかもしれない。しかしbabel-preset-stage-0至るまで、すべてのプラグインが含まれてstage-0しますstage-3。つまり、提案が可能かどうかに関係なく、すべての機能を提案してほしいということです。
Gaurav Kumar 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.