Параметр env в ESLint определяет предустановленные
наборы глобальных переменных и правил окружения выполнения кода. Он
влияет на то, какие идентификаторы считаются доступными без явного
объявления, а также формирует контекст анализа для линтера.
Фактически env задаёт модель исполнения JavaScript-кода:
браузер, Node.js, тестовые среды, ECMAScript-версии и специализированные
платформы. При включении конкретного окружения ESLint автоматически
добавляет соответствующие глобальные переменные в список разрешённых,
снижая количество ложных срабатываний.
envВ классической конфигурации .eslintrc параметр
env представляет собой объект, где ключи — названия
окружений, а значения — логические флаги включения:
{
"env": {
"browser": true,
"node": true
}
}
Каждое включённое окружение расширяет набор глобальных переменных.
Например, browser: true добавляет window,
document, navigator, а node: true
— require, module, process.
Активирует глобальные объекты веб-браузера:
windowdocumentnavigatorlocationfetch (в зависимости от среды выполнения)Используется в клиентских приложениях, SPA и фронтенд-библиотеках.
Добавляет глобальные переменные Node.js:
processBufferrequiremodule__dirname, __filenameКритично для серверных приложений, CLI-утилит и сборочных скриптов.
Включает поддержку глобальных сущностей и синтаксических особенностей ECMAScript 2015:
PromiseMap, Set, WeakMap,
WeakSetSymbolВажно учитывать, что es6 не включает поддержку модулей
как глобалов, поскольку это регулируется parserOptions.
Определяет окружение CommonJS:
requireexportsmoduleЧасто используется в Node.js-проектах без ESM.
Добавляет глобалы тестового фреймворка:
describetestexpectbeforeEach, afterEachСнижает необходимость ручного объявления тестовых функций.
Аналогично jest, но для Mocha:
describeitbefore, afterbeforeEach, afterEachПоддерживает глобалы Jasmine:
describeitexpectspyOnenv на анализ
кодаESLint использует env для формирования списка допустимых
глобальных переменных. При отсутствии соответствующего окружения любое
обращение к неописанному идентификатору трактуется как ошибка:
console.log(window); // ошибка, если browser: false
После включения окружения:
{
"env": {
"browser": true
}
}
тот же код становится валидным.
env допускает одновременное включение нескольких
контекстов исполнения:
{
"env": {
"browser": true,
"node": true,
"jest": true
}
}
Такой подход характерен для универсальных приложений, где один и тот же код может выполняться в разных средах: например, при сервер-сайде рендеринге и последующем гидрировании на клиенте.
env и
ECMAScript-версийПараметр env частично пересекается с
parserOptions.ecmaVersion, но выполняет другую функцию:
env определяет глобальные
переменныеparserOptions определяет синтаксическую
поддержкуПример:
{
"env": {
"es2022": true
},
"parserOptions": {
"ecmaVersion": 2022
}
}
Здесь es2022 добавляет глобалы и особенности среды, а
ecmaVersion позволяет парсеру понимать современный
синтаксис.
envНекоторые окружения позволяют расширять список глобальных переменных
через отдельную настройку globals. Однако env
сам по себе не предназначен для пользовательских значений, он работает
только с предустановленными наборами.
Типичная комбинация:
{
"env": {
"browser": true
},
"globals": {
"MyApp": "readonly"
}
}
Если несколько окружений определяют одно и то же имя глобальной переменной, ESLint объединяет их без конфликтов. При этом приоритет отсутствует: итоговый набор представляет собой объединение всех активных окружений.
Явное отключение выполняется через false:
{
"env": {
"browser": false,
"node": true
}
}
Это используется при миграции между средами или при строгом контроле глобального пространства имён.
Некоторые правила ESLint зависят от окружения. Например:
no-undef — проверяет использование неопределённых
переменныхno-restricted-globals — ограничивает доступ к
определённым глобаламБез корректного env эти правила генерируют избыточные
ошибки.
В новой системе конфигурации eslint.config.js концепция
env заменяется более явной настройкой через
languageOptions.globals.
Эквивалент классического browser:
export default [
{
languageOptions: {
globals: {
window: "readonly",
document: "readonly",
navigator: "readonly"
}
}
}
];
Тестовые окружения также подключаются через готовые пакеты глобалов.
В проектах с несколькими точками входа env может
задаваться на уровне:
Пример:
{
"env": {
"browser": true
},
"overrides": [
{
"files": ["server/**/*.js"],
"env": {
"node": true,
"browser": false
}
}
]
}
Такой подход позволяет разделять клиентский и серверный код без изменения основной конфигурации.
envno-undefenv включает синтаксис языка (эта функция
принадлежит parserOptions)env в
архитектуре линтингаМеханизм окружений формирует фундаментальную модель анализа кода: ESLint не только проверяет синтаксис и правила, но и интерпретирует среду выполнения. Это позволяет адаптировать статический анализ к различным платформам без изменения исходного кода.
Параметр env выступает слоем абстракции над глобальной
областью видимости, стандартизируя её для разных типов
JavaScript-приложений.