第 31 章 モジュールシステムとパッケージマネージャー
目次
書籍を購入する
(広告なのでブロックしないでください)

第 31 章 モジュールシステムとパッケージマネージャー

JavaScript にはモジュールに対する組み込みサポートが搭載されていませんが、コミュニティからは驚くべき回避策が生まれています。モジュールを管理するために、パッケージマネージャーと呼ばれるものを使用することができます。これは、検出、インストール、依存関係管理などを処理します

モジュールシステム

JavaScript モジュールにとっての重要な(かつ残念ながら互換性のない) 2 つの標準は次のとおりです:

CommonJS モジュール (CJS)

この標準の一番よく使用されている具体例は Node.js モジュールです(Node.js モジュールには CJS を超えるいくつかの機能があります)。その特徴には次のようなものがあります。

  • コンパクトな構文
  • 同期ロード用に設計されています
  • 主な用途: サーバー
非同期モジュール定義 (AMD)

この標準の最も一般的な実装は RequireJSです。その特徴には次のようなものがあります。

  • 構文が少し複雑ですが、これにより AMD は eval() や静的コンパイルステップなしで動作できます
  • 非同期ロード用に設計されています
  • 主な用途: ブラウザー

パッケージマネージャー

話が出たパッケージマネージャーでは、 npm(Node Packaged Modules)が Node.js にとっての一般的な選択肢です。反対に ブラウザーでは、2 つのオプションがよく使用されています:

  • Bower は AMD と CJS の両方をサポートするウェブ向けのパッケージマネージャーです。
  • Browserify は、npm パッケージをブラウザーで利用できるようコンパイルする、npm ベースのツールです

手っ取り早いモジュール

通常のウェブ開発では、RequireJS または Browserify などのモジュールシステムを使用する必要があります。ただし、単に素早くハックをまとめたい場合があります。その場合、次の単純なモジュールパターンが役立ちます:

var moduleName = function () {
    function privateFunction () { ... }
    function publicFunction(...) {
        privateFunction();
        otherModule.doSomething();  // implicit import
    }
    return { // exports
        publicFunction: publicFunction
    };
}();

前述は、グローバル変数 moduleName に格納されるモジュールです。次を実行します

  • 依存関係を暗黙的にインポートします(モジュール otherModule
  • プライベート関数、privateFunction を持ちます
  • publicFunction をエクスポートします

ウェブページでモジュールを使用するには、 <script> タグを使用してモジュールのファイルとその依存関係のファイルをロードするだけです

<script src="modules/otherModule.js"></script>
<script src="modules/moduleName.js"></script>
<script type="text/javascript">
    moduleName.publicFunction(...);
</script>

モジュールがロードされている間、他のモジュールにアクセスされなければ (moduleName の場合)、モジュールがロードされる順番は重要ではありません。

私のコメントとおすすめ事項を記載します。

  • 公式の名前があり自分で発明したわけではなったことがわかるまで、しばらくの間、このモジュールパターンを使用していました。クリスティアン・ヘイルマンが普及させ、「公開モジュールパターン」と名付けました。
  • このパターンを使用する場合は、シンプルに保ってください。グローバルスコープをモジュール名で汚すことは自由ですが、必ず固有名を見つけてください。これはハックのためだけなので、複雑にする必要はありません (ネストされた名前空間、複数のファイルに分割されたモジュールなど)。
次: 32. その他のツール