コンテンツにスキップ

"use strict"

詳細に入る前に、まず少し背景を説明します。

  • ESM(ECMAScriptモジュール)は常に暗黙的にstrictモードになります。 リンク

つまり、ESMを使用している場合は、ファイルの先頭に"use strict"を追加する必要はありません。デフォルトで有効になっています。

  • strictモードは単なるサブセットではありません。意図的に通常のコードとは異なるセマンティクスを持っています。

format: 'esm'

すべてのファイルがESMである場合は、"use strict"について気にする必要はありません。

ファイルにcommonjsモジュールが含まれている場合は、少し複雑になります。ESM出力を生成したいので、commonjsファイルのコードがstrictモードで有効であることを確認する必要があります。Rolldownはstrictモードで解析し、有効でない場合はエラーをスローします。

format: 'esm'を使用すると、rolldownはコードをstrictモードで解析し、strictモードに関連するエラーをスローします。解析後、rolldownは、存在する場合はすべてのモジュールから"use strict"を単純に削除します。

ESMはすでにstrictモードなので、出力コードに"use strict"は含まれません。

format: 'cjs'

commonjs出力を生成する際に"use strict"を処理するためのいくつかの戦略があります。

RollupはESM入力のみを受け入れるため、常に出力ファイルの先頭に"use strict"を追加します。

Esbuildは条件付きで"use strict"を生成しますが(リンク)、完全ではありません。

Esbuildはまた、スコープホイスティングを有効にした状態で、混合されたESMおよびCJSモジュールで"use strict"を完全に処理することはほぼ不可能であると説明しています(リンク)。

Rolldownは、可能な限り実行可能なコードを生成することを選択しました。

Rolldownは、チャンクのすべてのモジュールが以下の条件を満たす場合にのみ、各チャンクに"use strict"を追加します

  • ESM
  • ファイルの先頭に"use strict"を持つCommonjsモジュール

それ以外の場合は、チャンクに"use strict"を追加しません。チャンクに"use strict"が追加されないため、これは元のESMコードのセマンティクスを変更することに注意してください。

format: 'cjs'を使用すると、rolldownは最初にstrictモードでコードを解析し、最初の解析でエラーが発生した場合は、非strictモードで再解析します。

"use strict"によって何が影響を受けるかの詳細については、こちらを参照してください リンク

format: 'app'

すべてのモジュールが関数内にラップされているため、rolldownは元のモジュールを尊重して、関数ごとに"use strict"を生成するかどうかを選択できます。

MITライセンスの下でリリースされています。