跳至內容

"use strict"

在我們深入探討細節之前,讓我們先了解一些背景。

  • ESM(ECMAScript 模組)在技術上總是處於嚴格模式中。 連結

這表示如果你使用 ESM,則不需要在檔案開頭加入 "use strict"。 它預設就會啟用。

  • 嚴格模式不只是一個子集合:它故意與一般程式碼區分語意。

format: 'esm'

如果你所有檔案都是 ESM,則你不需要理會 "use strict"

如果你的檔案包含 commonjs 模組,事情會變得有點複雜。由於你想輸出 ESM,因此你必須確定你的 commonjs 檔案程式碼在嚴格模式中是有效的。Rolldown 會在嚴格模式中解析它,如果無效則會傳回錯誤。

透過 format: 'esm',rolldown 會在嚴格模式中解析你的程式碼,並會傳回與嚴格模式相關的錯誤。解析完畢後,rolldown 會在每個模組中移除 "use strict"(如果存在的話)。

輸出的程式碼不會包含 "use strict",因為 ESM 已經處於嚴格模式中。

format: 'cjs'

在輸出 commonjs 時,將有數種處理 "use strict" 的策略。

Rollup 會在輸出檔案的最前端加入 "use strict",因為它只接受 ESM 輸入。

Esbuild 有條件地輸出 "use strict"連結),但並非完全。

Esbuild 另外說明使用 ESM 和 CJS 混合模組,幾乎不可能在啟用範圍提升功能的情況下,完美處理 "use strict"連結)。

Rolldown 選擇輸出可執行的程式碼,並盡可能優化。

如果該區塊的所有模組都滿足下列條件,rolldown 只會在每個區塊加入 "use strict"

  • ESM
  • commonjs 模組,檔案前端帶有 "use strict"

否則,它會在區塊中省略 "use strict"。請注意,這會改變原始 ESM 程式碼的語意,因為 "use strict" 並未加入區塊中。

透過 format: 'cjs',rolldown 會先在嚴格模式中解析你的程式碼,如果第一次解析傳回錯誤,則會再次在非嚴格模式中解析。

在此查看更多關於 "use strict" 會影響哪些部分的資訊 連結

format: 'app'

由於每個模組都包覆在一個函式中,rolldown 可選擇根據原始模組來輸出每個函式的 "use strict"

以 MIT 授權方式釋出。