LoginSignup
0
0

ECMAScript Modules (ESM) と CommonJS

Last updated at Posted at 2024-04-03

ECMAScript Modules (ESM)

  • JavaScriptの標準規格で定義されたモジュールシステム
  • ブラウザとNode.jsで動作
  • 静的にモジュールを解析し、依存関係を解決
  • 型情報を含む
  • デフォルトエクスポートのみ許可
  • 相対パスと絶対パスの両方をサポート
  • 簡潔な構文
  • 動的importや名前空間など、新しい機能をサポート

CommonJS

  • Node.jsコミュニティで開発されたモジュールシステム
  • Node.jsでのみ動作
  • 実行時にモジュールをロードし、依存関係を解決
  • 型情報は含まない
  • すべてのエクスポートを許可
  • 相対パスのみサポート
  • 複雑な構文
  • CommonJSモジュールのエコシステムとの互換性

その他の違い

import require
動的import 可能 不可
名前空間 可能 不可
サイクル依存 検出可能 検出困難
Tree Shaking 可能 困難

動的import

サイクル依存

サイクル依存とは、モジュールAがモジュールBに依存し、モジュールBがモジュールAに依存するような依存関係のことです。

importの場合、モジュール解析時に依存関係を静的に解析するため、サイクル依存を検出することができます。

一方、requireの場合、モジュールロード時に依存関係を動的に解決するため、サイクル依存が発生した場合、無限ループに陥る可能性があります。

// モジュールA.js
const B = require("./B");

// モジュールB.js
const A = require("./A");

// エラー: サイクル依存が発生

JavaScriptにおける、 Tree Shaking とは?

どちらを使用するべきか

  • ブラウザで動作するコード: importを使用
  • Node.jsで動作するコード: requireを使用
  • 新しい機能を使用したい場合: importを使用
  • 既存のCommonJSモジュールと互換性を保ちたい場合: requireを使用

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0