設定語言選項
JavaScript 生態系統有多種執行環境、版本、擴充功能和框架。這些環境、版本、擴充功能和框架各自可能支援不同的語法和全域變數。ESLint 讓您可以設定專案中使用的 JavaScript 特有的語言選項,例如自訂全域變數。您也可以使用外掛程式來擴充 ESLint,以支援您專案的語言選項。
指定 JavaScript 選項
ESLint 允許您指定想要支援的 JavaScript 語言選項。預設情況下,ESLint 預期最新的 stage 4 ECMAScript 語法和 ECMAScript 模組 (ESM) 模式。您可以使用 languageOptions
鍵並指定以下一或多個屬性來覆寫這些設定
ecmaVersion
(預設值:"latest"
) - 指示要檢查程式碼的 ECMAScript 版本,決定語法和可用的全域變數。針對 ECMAScript 3 和 5 分別設定為3
或5
。否則,您可以使用2015
到目前的任何年份。在大多數情況下,我們建議使用預設值"latest"
,以確保您始終使用最新的 ECMAScript 版本。sourceType
(預設值:"module"
) - 指示正在使用的 JavaScript 檔案的模式。可能的值為module
- ESM 模組 (當ecmaVersion
為3
或5
時無效)。您的程式碼具有模組作用域,並以嚴格模式執行。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
- 允許將保留字用作識別符 (如果ecmaVersion
為3
)。ecmaFeatures
- 一個物件,指示您想要使用的其他語言功能
以下範例是啟用預設解析器中 JSX 解析的設定檔
// eslint.config.js
import { defineConfig } from "eslint/config";
export default defineConfig([
{
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true
}
}
}
}
]);
指定全域變數
ESLint 的某些核心規則依賴於執行時期程式碼可用的全域變數的知識。由於這些變數在不同的環境之間可能會差異很大,並且可以在執行時期修改,因此 ESLint 不會假設您的執行環境中存在哪些全域變數。如果您想要使用需要了解哪些全域變數可用的規則,您可以在設定檔中或透過在原始碼中使用設定註解來定義全域變數。
使用設定註解
若要使用 JavaScript 檔案內的註解指定全域變數,請使用以下格式
/* global var1, var2 */
這定義了兩個全域變數,var1
和 var2
。如果您想要選擇性地指定這些全域變數可以寫入 (而不僅僅是讀取),則可以使用 "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
}
}
}
]);