回答:
Babelのステージプリセットは、TC39プロセスと、潜在的な言語変更に対する各提案のさまざまな状態に相当します。それらには、その段階で提案されたすべての変更の実装とポリフィルが含まれます。
現在入っているものStage-0
は、Strawmanであり、 ES6 ではありません。これは将来のJavascriptであり、公式のECMAScript仕様に組み込まれることは絶対にありません。
これがもたらす影響を理解せずに機能するstage-0
ように、に設定しないでください。
ES6機能のみを含むBabelプリセットは preset-es2015
stage-0
が、決して完全に安全ではありません(ステージ1の後に取り下げられた呼び出しコンストラクターの提案を参照)。しかし、ステージ4以外のすべてのステージ(つまり、終了)についても同じことが言えます。
preset-es2015
、babel-preset-node6
これらの日に置き換えることができます。
babel-preset-env
ことに、どの環境でもターゲットにできます!
babel-preset-env
INSTEAD OFを使用してくださいbabel-preset-es2015
。babel-preset-es2015
ほぼ時代遅れです
主に他の回答で詳しく説明したように。ステージ4は最も安定しており、ステージ0は最も危険です。これは、以前の回答とドキュメントからの5つの段階の高レベルの内訳です。これを追加したのは、これにたどり着いたとき、各ステージが何であるかについてより高レベルの内訳を期待していたからです。
ECMAScript標準に含める準備ができており、テストに合格し、次のリビジョンの一部になります
完全な仕様のテキストが含まれ、主にテストされ、フィードバックが提供されているプラグインが含まれています。ソリューションは完全であり、それ以降のすべての変更は実装経験に基づいています。
プラグインのさらなるサポートは可能な限り完了しました。これらの要件は主に、途中の段階的な変更のみで満たされます。セマンティクスとAPIは完全であることが期待されています。それはおそらく仕様の一部になるでしょう。
各レベルは包括的ですが、4には3が含まれ、2には2などが含まれます。この合計が将来誰かを助けることを願っています。
ステージは、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に進んでください。
これは、理解するのに最適な出発点です。バベルプリセットとは
リンクからの抜粋:
ステージ0-Strawman:ただのアイデア、可能なBabelプラグイン。
ステージ1-提案:これは取り組む価値があります。
ステージ2-ドラフト:初期仕様。
ステージ3-候補:完全な仕様と初期ブラウザ実装。
ステージ4-終了:次の年次リリースに追加されます
全体像:
preset
はbabelの用語で呼ばれます。そして、各プリセットには、さまざまなレベルのリスクからのプラグインが含まれています。preset-0
これは、非常に実験的な機能のプラグインがあり、最終的な仕様に達するリスクが高いことを意味します。これは、Javascriptに特定の機能が必要であると開発者に思いついたアイデアのようなもので、彼はそれをTC-39プロポーザルプロセスに組み込むためにいくつかの作業を行いました。preset-1
TC-39が受け入れた機能のアイデアのプラグインが含まれており、彼らは作業する価値があると考えています。preset-2
初期ドラフトが機能の準備ができている機能のプラグイン。そして、それは続きます。そのため、ステージ0の機能がしばらくしてステージ2に達し、しばらくしてからJavascriptの次のリリースに入る可能性があります。
したがって、これらのBabelプリセットのバージョンごとに、プラグインの異なるセットを見つけることができます。また、ステージ0の機能にいくつかの変更が加えられ、機能の動作に重大な変更が加えられた可能性もあります。そして、それは到達しました。まったく異なるAPIを備えたステージ2としましょう。したがって、開発者は、これらのプラグインを更新するときに、コードに必要な変更を加える必要があります。
元の質問は「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が含まれます。
核となる考えは「その上のもの」です。上記の答えはその部分で非常に良いので、私は後半には答えません。
わかった。あなたたちはhttps://babeljs.io/docs/plugins/preset-stage-0/を参照することができます
一言で言えpreset-stage-0
ば、preset-stage-1
持ってpreset-stage-1
いるすべての機能が含まれ、持って いるすべての機能が含まれていますpreset-stage-2
...
数字が小さいほど強力です。あなたのプロジェクトで、問題に煩わされたくない場合は、設定してくださいstage-0
...
stage-0
、実際に等が何であるかを理解していますか?「数字が小さいほど強力だ」とおっしゃっていますので、そうではないと思います。
stage
ましたES6
、@ RGrahamはそれを指摘しました The Babel Preset which contains only ES6 features is preset-es2015
。ありがとう!
babel-preset-stage-0
至るまで、すべてのプラグインが含まれてstage-0
しますstage-3
。つまり、提案が可能かどうかに関係なく、すべての機能を提案してほしいということです。
stage-1
ですか?安全に使用できますか?一部のstage-1
機能は廃止され、APIは将来変更される可能性がありますか?