JSHint и jQuery: «$» не определено - PullRequest
207 голосов
/ 13 января 2012

следующие JS:

(function() {
  "use strict";

  $("#target").click(function(){
    console.log("clicked");
  });

}());

Урожайность:

test.js: line 5, col 3, '$' is not defined.

При окраске с использованием JSHint 0.5.5. Есть идеи?

Ответы [ 8 ]

375 голосов
/ 13 января 2012

Если вы используете относительно свежую версию JSHint, обычно предпочтительным подходом является создание файла .jshintrc в корне вашего проекта и добавление в него этой конфигурации:

{
    "globals": {
        "$": false
    }
}

Это объявляетв JSHint, что $ является глобальной переменной, а значение false указывает, что его не следует переопределять.

Файл .jshintrc не был поддержан в действительно старых версиях JSHint (таких как v0.5.5, как в оригинальном вопросе в2012).Если вы не можете или не хотите использовать файл .jshintrc, вы можете добавить его вверху файла скрипта:

/*globals $:false */

Существует также сокращенная опция jshint "jquery", как видно на Страница параметров JSHint ..

147 голосов
/ 19 июля 2013

Вы также можете добавить две строки к вашему .jshintrc

  "globals": {
    "$": false,
    "jQuery": false
  }

Это говорит jshint, что есть две глобальные переменные.

50 голосов
/ 03 сентября 2014

Все, что вам нужно сделать, это установить "jquery": true в вашем .jshintrc.

Согласно справочнику JSHint :

1010 * JQuery * Этот параметр определяет глобальные переменные, предоставляемые библиотекой jQuery JavaScript.

16 голосов
/ 20 февраля 2014

Вот небольшой список, который можно поместить в ваш файл .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
  },
}
7 голосов
/ 13 августа 2013

Если вы используете редактор IntelliJ, такой как WebStorm, PyCharm, RubyMine или IntelliJ IDEA:

В разделе «Среды» файла / «Настройка» / «JavaScript» / «Инструменты качества кода» / JSHint нажмите jQueryфлажок.

3 голосов
/ 14 августа 2014

Вместо того, чтобы рекомендовать обычное «отключение глобалов JSHint», я рекомендую использовать шаблон модуля для решения этой проблемы. Он сохраняет ваш код в «замкнутом» виде и повышает производительность (на основе «10 вещей, которые я узнал о Jquery» Пола Айриша)

Я обычно пишу свои шаблоны модулей так:

(function (window) {
    // Handle dependencies
    var angular = window.angular,
        $ = window.$,
        document = window.document;

    // Your application's code
}(window))

Вы можете получить эти другие преимущества производительности (подробнее здесь ):

  • При минимизации кода переданное в window объявление объекта также минимизируется. например window.alert() становится m.alert().
  • Код внутри самоисполняющейся анонимной функции использует только 1 экземпляр объекта window.
  • Вы переходите в погоню при вызове свойства или метода window, предотвращая дорогостоящий обход цепочки областей действия, например window.alert() (быстрее) против alert() (медленнее) производительности.
  • Локальная область действия функций через «пространство имен» и сдерживание (глобальные перемены - это зло). Если вам нужно разбить этот код на отдельные сценарии, вы можете создать подмодуль для каждого из этих сценариев и импортировать их в один основной модуль.
2 голосов
/ 21 февраля 2015

Чтобы исправить эту ошибку при использовании онлайн-реализации JSHint :

  • Нажмите «КОНФИГУРАЦИЯ» (верхняя часть среднего столбца на странице)
  • Включить "jQuery" (в разделе "ASSUME" внизу)
1 голос
/ 09 января 2014

Если вы используете редактор IntelliJ, в разделе

  • Параметры / Настройки
    • Javascript
      • Инструменты качества кода
        • JSHint
          • Предопределено (внизу), нажмите Установить

Вы можете ввести что угодно, например, console:false, и это добавит это к списку (.jshintrc), а также - как глобальное.

...