ホームページ >ウェブフロントエンド >jsチュートリアル >SeaJS と RequireJS_AngularJS の違いの比較
「歴史は過去ではありません。歴史は今起こっています。W3C やブラウザーなどの仕様の急速な発展に伴い、フロントエンドのモジュール開発は徐々にインフラストラクチャになります。最終的にはすべてが歴史になり、未来はより良くなります。」 「—— Yu Bo 氏の元の記事の最後の段落を引用すると、私は個人的に非常に同意します。さて、「将来」の話になりますが、フロントエンドのjsモジュールが発展していけば、そのモジュール形式が将来のWEBの標準仕様となり、実装方法が複数存在する可能性が高いと個人的には考えています。 JSON 形式と同様に、これは最終的に標準となり、ブラウザーによってネイティブに実装されました。
将来の非同期モジュールの標準となる可能性が高いのは誰ですか? SeaJS は CMD 仕様に従い、RequireJS は AMD 仕様に従います。これら 2 つの異なる形式から始めましょう。
CMD
CMD モジュールの依存関係宣言メソッド:
CMD の依存関係は近くで宣言され、内部の require メソッドを通じて宣言されます。ただし、これは非同期モジュールであるため、ローダーはこれらのモジュールを事前にロードする必要があるため、モジュールが実際に使用される前にモジュール内のすべての依存関係を抽出する必要があります。ローダーによってオンザフライで抽出されるか、自動化ツールによって事前に抽出されるかにかかわらず、CMD のこの依存関係宣言形式は静的解析を通じてのみ実現できますが、これが CMD の欠点です。
CMD 仕様の欠点
直接圧縮できません: require はローカル変数です。つまり、require 変数が置き換えられると、ローダーと自動化ツールはモジュールの依存関係を取得できなくなります。
モジュールの記述には追加の規則があります。パス パラメーターは文字列操作の対象にすることはできず、変数で置き換えることもできません。そうしないと、ローダーと自動化ツールがパスを正しく抽出できなくなります。
仕様外の契約は、仕様の一部でない限り、より多くの文書を意味します。
注: SeaJS の静的分析は、モジュール パッケージを toString() に配置し、正規表現を使用して必要な部分を抽出し、依存するモジュールのパスを取得することによって実装されます。
AMD
AMD モジュールの依存関係宣言方法:
AMD の依存関係は事前に宣言されています。この利点は、依存関係を静的に解析する必要がないことです。ローダーと自動化ツールの両方で依存関係を直接取得できるため、より強力な実装を作成できる可能性があります。ローダーと分析ツールは有益です。
AMD 仕様の欠点
依存関係を事前に宣言することは、コードを書く上であまり親切ではありません。
内部モジュールと NodeJS モジュールの間には特定の違いがあります。
2 番目の点については特別な説明が必要です。実際、CMD と AMD の非同期モジュールはどちらも同期モジュール仕様 (NodeJS のモジュール) と一致することができません。一方だけが他方よりも同期モジュールに似ています。 AMD を同期モジュールに変換するには、定義関数のラッパーを削除するだけでなく、ヘッダーで require を使用して依存関係を宣言する必要がありますが、CMD では定義関数のラッパーを削除するだけで済みます。
概要
仕様の点では、AMD はよりシンプルかつ厳密で、適用範囲が広くなっています。RequireJS の強力な推進により、海外ではほぼデファクトの非同期モジュール標準となり、主要なライブラリも続々と AMD 仕様をサポートしています。
しかし、SeaJS と CMD の観点から見ると、多くの良いことも実現しています。
1. 比較的自然な依存関係の宣言スタイル
2. 小さいながらも美しい内部実装
3. 緻密な周辺機能設計
4. 中国人コミュニティのサポートの向上
可能であれば、フロントエンド コミュニティ環境との一貫性を保つために、SeaJS も AMD をサポートしてほしいと考えています。最終的には、大多数の開発者が満足するでしょう。