Little A はスタートアップ チームのフロントエンド エンジニアで、プロジェクトの Javascript プログラムの作成を担当しています。
グローバル変数の競合
Xiao A は、自身の経験に基づいて、まず一般的に使用される関数をいくつか抽出し、関数として記述し、公開ファイルのbase.js に配置しました。
リトル C はリトル A の同僚です。彼はリトル A に報告しました。彼のページには underscore.js というクラス ライブラリが導入されており、このクラス ライブラリは _ グローバル変数も占有するため、base の _ に続きます。 jsの競合。 A 君は、underscore.js はサードパーティのライブラリなので変更は難しいだろうが、base.js は多くのページにデプロイされており、変更することは不可能であると考えました。結局、Little A には、underscore.js が占有するグローバル変数を変更する以外に選択肢はありませんでした。
この時点で、Little A は、すべての関数を名前空間に配置すると、グローバル変数の競合の可能性を減らすことができるが、グローバル変数の競合の問題は解決されないことを発見しました。
依存関係
Xiao A は、ビジネスの発展に伴い、タブ切り替えコンポーネント tabs.js などの一連の関数ライブラリと UI コンポーネントを作成しました。このコンポーネントは、base.js と util.js の関数を呼び出す必要があります。
ある日、新しい同僚の Xiao D と Xiao A が、ページ内で tabs.js を参照したが、その機能が正常ではなかったと報告しました。小人 A は一目で問題を発見しました。小人 D は tabs.js がbase.js と util.js に依存していることを知らず、これら 2 つのファイルへの参照を追加しなかったことが判明しました。そこで、彼はすぐに変更を加えました。
小さな A は、作成者である自分はコンポーネントの依存関係を自然に知っているが、他の人、特に初心者にはそれを伝えるのは難しいと考えました。
しばらくして、Xiao A はタブ切り替えコンポーネントに関数を追加しました。この関数を実現するには、tabs.js も ui.js 内の関数を呼び出す必要があります。このとき、A さんは、tabs.js を呼び出すすべてのページに ui.js への参照を追加する必要があるという重大な問題を発見しました。 ! !
しばらくして、Xiao A は tabs.js を最適化しました。このコンポーネントは util.js に依存しなくなったので、tabs.js を使用するすべてのページで util.js への参照を削除しました。彼の修正は大きな問題を引き起こしました。テストチーム MM は、いくつかのページが異常であると彼に言いました。 A 君は、見てみると、いくつかのページの他の関数が util.js の関数を使用していることに気づき、このファイルへの参照を削除し、エラーが発生しました。通常の機能を保証するために、彼はコードを復元しました。
もう一度考えてみましたが、ページを 1 つずつ変更せずに、他の機能に影響を与えずに依存関係を変更する方法はあるでしょうか?
モジュラー
小さな A がインターネットを閲覧していたとき、これまでに遭遇したすべての問題を解決できる新しいモジュール式コーディング方法を偶然発見しました。
モジュール型プログラミングでは、各ファイルがモジュールです。各モジュールは、define という関数によって作成されます。たとえば、base.js をモジュールに変換すると、コードは次のようになります:
特定のモジュールが提供するインターフェースを呼び出すにはどうすればよいですか? tabs.js を例に挙げます。これは、base.js と util.js に依存します。
ネイティブ ブラウザのサポートがないため、モジュール形式でコーディングしたい場合は、ローダーと呼ばれるものを使用する必要があります。
現在、require.js や seajs など、ローダーの実装が多数あります。 JRaiser クラス ライブラリには独自のローダーもあります。