ECMAScript生態系


JavaScriptは素晴らしい言語です.それは常に進化し、新しい機能と機能を追加します.しかし、それはあなたが構文の特定の部分を使用できるかどうかを把握する挑戦することができます.あなたのプロジェクトに応じて、遊びに様々な要因があります.それで、それについて話しましょう!

新しい構文


let thing = obj?.node?.thing ?? 2
上の例ではJavaScriptの構文の2つの真新しい部分を使用します.?.??.プロジェクトのコード行を使いたいとします.何をする必要がありますか?技術スタックのどの部分は、有効なJavaScriptが何であるかさえ決定します?

ECMAScript


上記の質問に答えるために、我々は始めから始めなければなりません.JavascriptはECMAScriptというスクリプト言語の標準に基づいています.標準自体は常に変更され、新しい機能を追加します.この処理はTC39と呼ばれる委員会によって制御される.
追加のための提案は、JavaScriptコミュニティのどんなメンバーによってでもされることができます.彼らが包含のために評価されるので、彼らはmultiple stagesを通して行きます.これには複雑性があるが、一般にはステージ1、ステージ2、ステージ3を通過する.ステージ3の提案は、バベルでの実装を持っている必要があります-私たちはすぐにこれを取得します.
最終段階はステージ4です.それは、オプションの連鎖と悪質な合体が現在あるところです.この段階での提案を採用!それらはESNEEDと呼ばれるダイナミックなECMAScriptバージョンの一部です.ESNEXT次のリリースの一部に設定されている機能が含まれます.ecmascriptリリースは毎年発生し、前年からのすべてのステージ4の提案が含まれます.例えば、ES 2019は2018年6月にリリースされました.
しかし、ステージ4に達する機能は、必ずしもあなたがそれを使うことができるというわけではありません.出血エッジ構文を含める場合は、どのようにECMAScript標準が採用され、サポートされているかを理解したいでしょう.

バベル


ブランドの新しいステージ4提案(または、あなたがフィードバックを提供したいならば、以前の段階さえ)を使うことができるあなたの最高の機会は、あなたのプロジェクトでBabelプラグインを含むことです.なぜバベル?
バベルは、JavaScriptのためのトランスポーターです.現代の構文を使用してJavaScriptを作成し、そのコードを“古い”JavaScriptにコンパイルすることができますそれで、それは現代の構文がまだサポートされない状況で動くことができます.
バベルは自分で実行することができますが、それはしばしばWebパックのようなツールでバンドルされます.JavaScriptプロジェクトをビルドすると、出力はJavaScriptです.あなたのビルドプロセスがどのように見えるかによって、以前よりかなり読みにくいですが.このポストのために、我々は生産の構築について話していると仮定します.
次のステップは、ビルドされたJavaScriptをどこかで実行することです.どこかにあなたのターゲット環境と見なされます.

ジャバスクリプト


私たちはよくJavaScriptはどこにでも冗談だが、それは真実のようだ冗談.JavaScriptプロジェクトを作成するときは、いつどこで実行されるのかはわかりません.代わりに、サポートするターゲット環境の最小バージョンにフォーカスします.しかし、ターゲット環境とは?
JavaScriptはブラウザで動く.ブラウザはデスクトップとモバイルデバイスに存在するので、それらのすべては潜在的ターゲット環境です.JavaScriptは、ノードを使用するときにサーバー側を実行することもできます.あなたのサーバー側のターゲット環境を知ることは、すべてのユーザーが特定のブラウザのバージョンを使用すると確信しているよりも可能性が高いです.ただし、ターゲット環境は、サーバー側やクライアント側であるかどうかを指定できます.

ジャバスクリプトエンジン


JavaScriptはジャストインタイムコンパイラを使います.コードをコンパイルし解釈するエンジンです.それがわかるように、すべてのJavaScriptエンジンはECMAScript標準にマッチするためにつくられます.エンジンは有効なJavaScript(標準で定義されるように)を有効な機械コードに翻訳します.
各々のエンジンがECMAScript標準にマッチするために書かれるので、エンジン自体はあなたがあなたのプロジェクトで使用できるどんな構文を決定します.そして、各々の目標環境は、それ自身のエンジンを持っています!ブラウザはあなたのサイトにアクセスするユーザーですか?どのブラウザがそのブラウザに入っていますか.あなたのコードで使用しようとしている構文をサポートしていますか?

互換性


それで、我々はJavascriptエンジンがECMAScript標準を支持するために書かれるということを知っています.そして、その結果、それらのエンジンは、与えられた構文が働くかどうかの最終的な調停者です.しかし、我々はまた、標準は常に進化している知っている.それで、どのように、あなたが目標としているエンジンがあなたが使用しようとしている特徴を含めたかどうかわかっていますか?
ウェブ上で複数のプロジェクトが更新され、compatibility tableを維持することができます.これらのテーブルは、利用可能なコンパイラ/polyfills、ブラウザやノードのバージョンを追跡し、彼らがサポートしているかどうかをメモするecmascriptの機能に一致します.

There are also great sites like https://caniuse.com/


"バージョン"


互換性テーブルの列は、様々な種類のテクノロジを一緒にクラスタ化します.ブラウザ(私たちは一緒に携帯電話とデスクトップ)、コンパイラ/ポリフィルとサーバー/ランタイムJavaScriptがあります.
ブラウザーは定期的に更新を解放し、バージョン番号を添付します.互換性テーブルは、内部のJavaScriptエンジンが特定のECMAScript標準(そして、関連した構文)を支持するかどうかに関係なく、最も最近で人気の安定したリリースとメモを考慮に入れます.モバイルデバイスのブラウザも含まれています.
コンパイラ/ポリフィルセクションでは、異なる技術の一握りが含まれています.BabelとTypescript列には、core-jsバージョン番号が含まれます.JavaScriptのポリフィルを提供するライブラリを参照します.バベルは、既存の構文の多くを配信している間、新しいキーワードや脂肪矢印表記のように不足しているいくつかのことがあります.それは、core-jsバージョンが注目される理由です.

Note that @babel/polyfill exists and uses core-js under the hood. However, it was deprecated in favor of using core-js directly.


テーブルの列の最終セットは、サーバー/実行時Javascriptに関連します.ここでnodeに集中します.ノードはJavaScriptがサーバー側を走らせることができる多くのものを含みます、そして、それらの1つはJavaScriptエンジンです.この場合、V 8エンジンを使用します.これは実際にクロムブラウザが走るエンジンです.ノード自体にバージョンがあります.各々のバージョンはV 8エンジンでバンドルされています、そして、V 8バージョンが最新であるどんなEcmasScript標準によって、どんな構文が有効なJavascriptであるかについて決めます.

JavaScriptアプリケーションのサポート


JavaScriptについて素晴らしいことの一部は、それを書いて、すぐに行動においてそれを見る多数の方法があるということです.しかし、それが判明すると、生産JavaScriptは、フードの下に多く含まれています.
最も一般的な分母ターゲット環境と互換性があった構文を使用してコードを書くことは、非常に挑戦的です.それが閾値であるならば、我々は使用中のすべてのブラウザーがそれを支持するまで、長年の間オプションの連鎖を使うことができません.または我々は非常に最新の携帯電話および/またはブラウザの更新のみにユーザーを制限します.あなたが疑わしいかもしれないように、開発者はそれを望まないでしょう.
生産アプリケーションは、構築されたJavaScriptの互換性質問をします.含まれている構文は、我々の最小限の目標環境の中でエンジンと互換性を持ちますか?そういうわけで、プロジェクトはBabelのようなトランジスターを使用します.古いブラウザ間で互換性のあるJavaScriptを作成するには.インターネットエクスプローラがまだそれをサポートしていない場合でも、オプションの連鎖を使用することができます.
あなたはこの情報の多くを知らずに驚くべきJavaScriptプロジェクトを開発することができます.しかし、あなたはどのように新しい機能になるか、またはあなたのプロジェクトの出血の端に何かをサポートする方法を見つけることに興味を持っている場合は、これらの詳細を理解するのはいいことだ.