JSHint и jQuery: '$' не определен
Следующий JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
Урожайность:
test.js: line 5, col 3, '$' is not defined.
При использовании lint с использованием JSHint 0.5.5. Любые идеи?
Ответы
Ответ 1
Если вы используете относительно новую версию JSHint, обычно предпочтительный подход заключается в создании файла .jshintrc в корне вашего проекта и вставьте в него эту конфигурацию:
{
"globals": {
"$": false
}
}
Это объявляет JSHint, что $- глобальная переменная, а false указывает, что ее нельзя переопределять.
Файл .jshintrc не поддерживался в действительно старых версиях JSHint (например, v0.5.5, как исходный вопрос в 2012 году). Если вы не можете или не хотите использовать файл .jshintrc, вы можете добавить это в начало файла script:
/*globals $:false */
Существует также сокращенная опция jquint jQuery, как показано на странице JSHint.
Ответ 2
Вы также можете добавить две строки к вашему .jshintrc
"globals": {
"$": false,
"jQuery": false
}
Это говорит jshint, что есть две глобальные переменные.
Ответ 3
Все, что вам нужно сделать, это установить "jquery": true
в .jshintrc
.
В ссылка на параметры JSHint:
JQuery
Этот параметр определяет глобальные значения, отображаемые библиотекой jQuery JavaScript.
Ответ 4
Вот счастливый маленький список, чтобы положить в ваш .jshintrc
Я добавлю к этому списку на время.
{
// other settings...
// ENVIRONMENTS
// "browser": true, // Is in most configs by default
"node": true,
// others (e.g. yui, mootools, rhino, worker, etc.)
"globals": {
"$":false,
"jquery":false,
"angular":false
// other explicit global names to exclude
},
}
Ответ 5
Если вы используете редактор IntelliJ, такой как WebStorm, PyCharm, RubyMine или IntelliJ IDEA:
В разделе "Окружения" в разделе "Параметры файла/Настройки/JavaScript/Кодекс качества /JSHint " установите флажок jQuery.
Ответ 6
Вместо того, чтобы рекомендовать обычный "отключить глобальные переменные JSHint", я рекомендую использовать шаблон модуля, чтобы исправить эту проблему. Он сохраняет ваш код "содержащимся" и дает повышение производительности (на основе Paul Irish "10 вещей, которые я узнал о JQuery" ).
Я предпочитаю писать мои шаблоны модулей следующим образом:
(function (window) {
// Handle dependencies
var angular = window.angular,
$ = window.$,
document = window.document;
// Your application code
}(window))
Вы можете получить эти другие преимущества производительности (объясняется более здесь):
- При миниировании кода также передается принятое в объявлении объекта
window
. например window.alert()
стать m.alert()
.
- Код внутри самообслуживающей анонимной функции использует только 1 экземпляр объекта
window
.
- Вы переходите к преследованию при вызове свойства или метода
window
, что предотвращает дорогостоящий обход цепочки областей, например. window.alert()
(быстрее) по сравнению с alert()
(медленнее).
- Локальный объем функций через "пространство имен" и сдерживание (глобальные значения являются злыми). Если вам нужно разбить этот код на отдельные сценарии, вы можете сделать подмодуль для каждого из этих сценариев и импортировать их в один основной модуль.
Ответ 7
Если вы используете редактор IntelliJ, под
- Настройки/Настройки
- Javascript
- Инструменты качества кода
- JSHint
- Предопределенный (внизу), нажмите Установить
Вы можете ввести что угодно, например console:false
, и оно добавит это в список (.jshintrc), а также - как глобальное.
Ответ 8
Чтобы исправить эту ошибку при использовании онлайн-реализации JSHint:
- Нажмите "КОНФИГУРАЦИЯ" (вверху среднего столбца на странице).
- Включить "jQuery" (в разделе "ASSUME" внизу)
Ответ 9
Вы, вероятно, хотите сделать следующее,
const $ = window.$
чтобы избежать ошибки бросания линтинга.