版本

設定語言選項

JavaScript 生態系統有多種執行環境、版本、擴充功能和框架。這些環境、版本、擴充功能和框架各自可能支援不同的語法和全域變數。ESLint 讓您可以設定專案中使用的 JavaScript 特有的語言選項,例如自訂全域變數。您也可以使用外掛程式來擴充 ESLint,以支援您專案的語言選項。

指定 JavaScript 選項

ESLint 允許您指定想要支援的 JavaScript 語言選項。預設情況下,ESLint 預期最新的 stage 4 ECMAScript 語法和 ECMAScript 模組 (ESM) 模式。您可以使用 languageOptions 鍵並指定以下一或多個屬性來覆寫這些設定

  • ecmaVersion (預設值:"latest") - 指示要檢查程式碼的 ECMAScript 版本,決定語法和可用的全域變數。針對 ECMAScript 3 和 5 分別設定為 35。否則,您可以使用 2015 到目前的任何年份。在大多數情況下,我們建議使用預設值 "latest",以確保您始終使用最新的 ECMAScript 版本。
  • sourceType (預設值:"module") - 指示正在使用的 JavaScript 檔案的模式。可能的值為
    • module - ESM 模組 (當 ecmaVersion35 時無效)。您的程式碼具有模組作用域,並以嚴格模式執行。
    • commonjs - CommonJS 模組 (如果您的程式碼使用 require(),則很有用)。您的程式碼具有頂層函式作用域,並以非嚴格模式執行。
    • script - 非模組。您的程式碼具有共用的全域作用域,並以非嚴格模式執行。

以下範例是您在檢查 ECMAScript 5 程式碼時可能使用的設定檔

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            ecmaVersion: 5,
            sourceType: "script"
        }
    }
]);

指定解析器選項

如果您使用內建的 ESLint 解析器,您可以額外指定 languageOptions.parserOptions 鍵來變更 ESLint 解釋程式碼的方式。所有選項預設為 false

  • allowReserved - 允許將保留字用作識別符 (如果 ecmaVersion3)。
  • ecmaFeatures - 一個物件,指示您想要使用的其他語言功能
    • globalReturn - 允許在全域作用域中使用 return 陳述式。
    • impliedStrict - 啟用全域嚴格模式 (如果 ecmaVersion5 或更高版本)。
    • jsx - 啟用 JSX

以下範例是啟用預設解析器中 JSX 解析的設定檔

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            parserOptions: {
                ecmaFeatures: {
                    jsx: true
                }
            }
        }
    }
]);

指定全域變數

ESLint 的某些核心規則依賴於執行時期程式碼可用的全域變數的知識。由於這些變數在不同的環境之間可能會差異很大,並且可以在執行時期修改,因此 ESLint 不會假設您的執行環境中存在哪些全域變數。如果您想要使用需要了解哪些全域變數可用的規則,您可以在設定檔中或透過在原始碼中使用設定註解來定義全域變數。

使用設定註解

若要使用 JavaScript 檔案內的註解指定全域變數,請使用以下格式

/* global var1, var2 */

這定義了兩個全域變數,var1var2。如果您想要選擇性地指定這些全域變數可以寫入 (而不僅僅是讀取),則可以使用 "writable" 旗標來設定每個變數

/* global var1:writable, var2:writable */

使用設定檔

若要在設定檔內設定全域變數,請將 languageOptions.globals 設定屬性設定為一個物件,其中包含以您要使用的每個全域變數命名的鍵。對於每個全域變數鍵,將對應的值設定為 "writable" 以允許覆寫變數,或設定為 "readonly" 以禁止覆寫。例如

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            globals: {
                var1: "writable",
                var2: "readonly"
            }
        }
    }
]);

此設定允許在您的程式碼中覆寫 var1,但禁止覆寫 var2

可以透過將全域變數的值設定為 "off" 來停用它們。例如,在大多數全域變數都可用,但 Promise 不可用的環境中,您可能會使用此設定

// eslint.config.js
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            globals: {
                Promise: "off"
            }
        }
    }
]);

預定義的全域變數

除了 ECMAScript 標準內建的全域變數 (它們會根據設定的 languageOptions.ecmaVersion 自動啟用) 之外,ESLint 不提供預定義的全域變數集。您可以使用 globals 套件來額外啟用特定環境的所有全域變數。例如,以下是如何將 console 以及其他瀏覽器全域變數新增到您的設定中。

// eslint.config.js
import globals from "globals";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            globals: {
                ...globals.browser
            }
        }
    }
]);

您可以使用相同的方式包含多個不同的全域變數集合。以下範例同時包含網頁瀏覽器和 Jest 的全域變數

// eslint.config.js
import globals from "globals";
import { defineConfig } from "eslint/config";

export default defineConfig([
    {
        languageOptions: {
            globals: {
                ...globals.browser,
                ...globals.jest
            }
        }
    }
]);
變更語言