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.$

чтобы избежать ошибки бросания линтинга.