忽略檔案
您可以透過以下方式在 linting 時設定 ESLint 忽略某些檔案和目錄,方法是在以下方式中指定一個或多個 glob 模式
- 在您的
eslint.config.js
檔案內。 - 在命令列上使用
--ignore-pattern
。
忽略檔案
在您的 eslint.config.js
檔案中,如果 ignores
鍵在設定物件中未使用任何其他鍵,則這些模式會作為全域忽略。以下是一個範例
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([".config/*"])
]);
此設定指定應忽略 .config
目錄中的所有檔案。此模式是在預設模式 ["**/node_modules/", ".git/"]
之後新增的。
您也可以使用 --ignore-pattern
在命令列上忽略檔案,例如
npm
npx eslint . --ignore-pattern '.config/*'
yarn
yarn dlx eslint . --ignore-pattern '.config/*'
pnpm
pnpm dlx eslint . --ignore-pattern '.config/*'
bun
bunx eslint . --ignore-pattern '.config/*'
忽略目錄
忽略目錄的工作方式與忽略檔案相同,方法是將模式放在沒有其他鍵的設定物件的 ignores
鍵中。例如,以下範例忽略整個 .config
目錄(表示檔案搜尋完全不會遍歷它)
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([".config/"])
]);
與 .gitignore
不同,像 .config
這樣的忽略模式只會忽略與設定檔位於同一目錄中的 .config
目錄。如果您想遞迴地忽略所有名為 .config
的目錄,則需要使用 **/.config/
,如此範例所示
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores(["**/.config/"])
]);
取消忽略檔案和目錄
您也可以取消忽略先前模式(包括預設模式)忽略的檔案和目錄。例如,此設定取消忽略 node_modules/mylibrary
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([
"!node_modules/", // unignore `node_modules/` directory
"node_modules/*", // ignore its content
"!node_modules/mylibrary/" // unignore `node_modules/mylibrary` directory
])
]);
如果您想忽略目錄,但特定檔案或子目錄除外,則必須使用忽略模式 directory/**/*
而不是 directory/**
。模式 directory/**
會忽略整個目錄及其內容,因此遍歷會完全跳過該目錄,並且您無法取消忽略其中的任何內容。
例如,build/**
忽略目錄 build
及其內容,而 build/**/*
僅忽略其內容。如果您想忽略 build
目錄中的所有內容,但 build/test.js
除外,則需要建立如下的設定
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([
"build/**/*", // ignore all contents in and under `build/` directory but not the `build/` directory itself
"!build/test.js" // unignore `!build/test.js`
])
]);
如果您想忽略目錄,但位於目錄下任何層級的特定檔案除外,則也應確保未忽略子目錄。請注意,雖然以 /
結尾的模式僅比對目錄,但不以 /
結尾的模式則同時比對檔案和目錄,因此無法編寫單一模式來僅忽略檔案,但您可以使用兩種模式來達成此目的:一種忽略所有內容,另一種取消忽略子目錄。
例如,此設定忽略 build
目錄及其下所有檔案,但任何層級名為 test.js
的檔案除外
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores([
"build/**/*", // ignore all contents in and under `build/` directory but not the `build/` directory itself
"!build/**/*/", // unignore all subdirectories
"!build/**/test.js" // unignore `test.js` files
])
]);
您也可以使用 --ignore-pattern
在命令列上取消忽略檔案,例如
npm
npx eslint . --ignore-pattern '!node_modules/'
yarn
yarn dlx eslint . --ignore-pattern '!node_modules/'
pnpm
pnpm dlx eslint . --ignore-pattern '!node_modules/'
bun
bunx eslint . --ignore-pattern '!node_modules/'
Glob 模式解析
glob 模式的評估方式取決於它們的位置和使用方式
- 在
eslint.config.js
檔案中使用ignores
時,glob 模式是相對於eslint.config.js
檔案進行評估的。 - 當在使用
--config
命令列選項指定的替代設定檔中使用ignores
時,glob 模式是相對於目前工作目錄進行評估的。 - 當使用
--ignore-pattern
時,glob 模式是相對於目前工作目錄進行評估的。
命名全域忽略設定
預設情況下,globalIgnores()
將為設定指派一個代表您忽略的名稱。您可以透過提供 globalIgnores()
的第二個引數來覆寫此名稱,該引數是您想要使用的名稱,而不是預設名稱
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores(["build/**/*"], "Ignore build directory")
]);
此範例中的 "Ignore Build Directory"
字串是為全域忽略建立的設定名稱。這對於偵錯目的很有用。
忽略檔案警告
當您將目錄傳遞到 ESLint CLI 時,檔案和目錄會以靜默方式忽略。如果您將特定檔案傳遞給 ESLint,則 ESLint 會建立一個警告,指出該檔案已跳過。例如,假設您有一個 eslint.config.js
檔案,如下所示
// eslint.config.js
import { defineConfig, globalIgnores } from "eslint/config";
export default defineConfig([
globalIgnores(["foo.js"])
]);
然後您執行
npm
npx eslint foo.js
yarn
yarn dlx eslint foo.js
pnpm
pnpm dlx eslint foo.js
bun
bunx eslint foo.js
您會看到此警告
foo.js
0:0 warning File ignored because of a matching ignore pattern. Use "--no-ignore" to disable file ignore settings or use "--no-warn-ignored" to suppress this warning.
✖ 1 problem (0 errors, 1 warning)
之所以出現此訊息,是因為 ESLint 不確定您是否真的想要 lint 該檔案。如訊息所示,您可以使用 --no-ignore
來省略使用忽略規則。
包含 .gitignore 檔案
如果您想包含來自 .gitignore
檔案或任何其他具有 gitignore 樣式模式的檔案的模式,您可以使用來自 @eslint/compat
套件的 includeIgnoreFile
工具程式。
// eslint.config.js
import { defineConfig } from "eslint/config";
import { includeIgnoreFile } from "@eslint/compat";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const gitignorePath = path.resolve(__dirname, ".gitignore");
export default defineConfig([
includeIgnoreFile(gitignorePath),
{
// your overrides
}
]);
這會自動載入指定的檔案,並將 gitignore 樣式模式轉換為 ignores
glob 模式。