ESLint - «окно» не определено. Как разрешить глобальные переменные в package.json

187

Я назначаю свойство глобальному объекту окна, но когда я запускаю eslint, я получаю это:

«окно» не определено

Я вижу это здесь, в документах eslint :

следующее определяет окно как глобальную переменную для кода, который не должен вызывать тестируемое правило:

valid: [
  {
    code: "window.alert()",
    globals: [ "window" ]
  }
]

Я попытался добавить что-то вроде этого в файл package.json, чтобы eslint разрешил использование «окна» в качестве глобальной переменной, но я должен что-то делать не так. Из документации кажется, что мне может понадобиться сделать что-то подобное в отдельном файле, но есть ли способ определить некоторые разрешенные глобальные переменные прямо в файле package.json?

chevin99
источник
К вашему сведению, если вы используете узел и хотите, чтобы ESLint распознавал, globalто вам нужно убедиться, что "node": trueон установлен в вашей "env"конфигурации.
Джошуа Пинтер

Ответы:

310

Существует встроенная функция, environment: browserкоторая включает в себя window.

Пример .eslintrc.json:

"env": {
    "browser": true,
    "node": true,
    "jasmine": true
  },

Дополнительная информация: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

Смотрите также в package.jsonответ на chevin99 ниже.

Laoujin
источник
Абсолютно лучший ответ, спасибо. Я даже не думал об этом :)
Рыцарь Йоши
4
Только в случае , если кто - то получает пойманы , как я: Это должно быть .eslintrcнеpackage.json
баночка глины
Есть ли способ сделать это применимо только к одному файлу?
AnnanFay
Я нашел следующее в ответе/* eslint-env browser */
Карлса
102

Я нашел это на этой странице: http://eslint.org/docs/user-guide/configuring

В package.json это работает:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
chevin99
источник
63
правильный способ сделать это - использовать «env»: {«browser»: true}
Николас
@Nicolas, да, я бы, наверное, использовал предложенный вами метод, если бы это было то, что я нашел первым, но этот ответ, по крайней мере, полезен для того, чтобы показать, что вы можете настроить свой eslint config в package.json.
chevin99
4
Также возможно встроить глобальные значения для eslint, как это: / * global angular: true * /
Мирко
в частности, вопрос
virtualLast
59

Добавьте .eslintrcв проект корень.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
Кирк Стробек
источник
Каким-то образом размещение eslingConfig в package.json у меня не сработало (не считая концептуально неправильным). Добавление в .eslintrc.json работает, хотя.
Петрунов
1
@Petrunov .eslintrc.jsonможет быть просто.eslintrc
Кирк Стробек
это не работает в одном случае, я испытываю - я использую eslint с gulp для проекта расширения Chrome. в глобальных параметрах я устанавливаю "chrome": true, и он по-прежнему выдает ошибку о том, что он неопознанный глобал.
Стивен Тетро
42

Ваш .eslintrc.json должен содержать текст ниже.
Таким образом, ESLint узнает о ваших глобальных переменных.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
Сергей Андреев
источник
14

Я знаю, что он не просит встроенную версию. Но так как этот вопрос имеет почти 100 000 посещений, и я попал сюда в поисках этого, я оставлю это здесь следующему товарищу по кодированию:

Убедитесь, что ESLint не запускается с --no-inline-configфлагом (если это не звучит знакомо, вы, вероятно, хорошо). Затем запишите это в свой файл кода (для ясности и условности, он написан поверх файла, но он будет работать где угодно):

/* eslint-env browser */

Это говорит ESLint, что ваша рабочая среда - это браузер, поэтому теперь он знает, что доступно в браузере, и адаптируется соответствующим образом.

Существует множество сред , и вы можете объявить более одного одновременно, например, в строке:

/* eslint-env browser, node */

Если вы почти всегда используете определенные среды, лучше всего установить это в конфигурационном файле ESLint и забыть об этом.

Из их документов :

Среда определяет глобальные переменные, которые предопределены. Доступные среды:

  • browser глобальные переменные браузера.
  • node - Глобальные переменные Node.js и область видимости Node.js.
  • commonjs - Глобальные переменные CommonJS и область видимости CommonJS (используйте это для кода только для браузера, который использует Browserify / WebPack).
  • shared-node-browser - Глобальные переменные, общие для узла и браузера.

[...]

Помимо окружения, вы можете игнорировать все, что захотите. Если он предупреждает вас об использовании, console.log()но вы не хотите, чтобы вас об этом предупреждали, просто вставьте:

/* eslint-disable no-console */

Вы можете увидеть список всех правил , в том числе рекомендуемые правила, которые должны соответствовать правилам кодирования .

Карлес Алколея
источник
2

Если вы используете Angular, вы можете получить его с помощью:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
AndreaM16
источник