JSHint и jQuery: «$» не определено


215

Следующий JS:

(function() {
  "use strict";

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

}());

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

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

При окраске с использованием JSHint 0.5.5. Любые идеи?


Вы добавили jquery.jsна свою страницу?
Рори МакКроссан

4
Ну, если вы кормите его только этим кодом, $ он не определен.
Заостренный

У меня есть эта проблема в угловых. Просто измените $ на angular.element и jshint no warn
Рафаэль Витор

Ответы:


381

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

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

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

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

/*globals $:false */

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


47
Эта опция, jquery, просто определяет две глобальные переменные только для чтения: $ и jQuery. Это более короткая версия /*global $:false, jQuery:false */.
Антон Ковалев

1
В моем JSHint для Visual Studio опция называется «предположить, что jQuery»
Jowen

2
Опция flag - это путь. Для новичков: добавьте строку «jquery: true» в ваш файл .jshintrc.
genkilabs

3
В чем причина ": false"? Я обнаружил, что / * global $ * / работает просто отлично. (В моем случае это был / * глобальный jQuery * / хотя)
Michiel

Есть ли способ установить это общее для всех функций в сценарии, а не вводить один за другим в /* global ... */ ? Обычно я импортирую сценарий со всеми своими функциями в свой, mainпоэтому его
сложно

148

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

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

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


3
это должен быть принятый ответ. загрязнение КАЖДОГО ОДНОГО ФАЙЛА JavaScript в вашем проекте различными строками кода, чтобы осчастливить проверку синтаксиса, не вариант. Спасибо wmil
Космин

51

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

В соответствии с опциями JSHint :

JQuery

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


6
Вероятно, это должен быть главный ответ ... позор, это похоронено здесь
Зак Лисобей

Где найти файл .jshintrc в Sublime text 3? Я попытался поместить эту опцию в файл SublimeLinter.sublime-settings (Preferences-> Package Package-> SublimeLinter-> Settings-Default), а также попытался создать новый файл .jshintrc (my.jshintrc) в корневой директории моего проекта, в соответствии с jshint.com/docs . Не это помогло мне.
Милос

@Milos Установите JSHint Gutter в сублиметексте 3. Перейдите в Инструменты> JSHint> Установить настройки Linting, откроется .jshintrc.
нирен

1
Ничего, он все еще не может распознать знак "$". Когда я открываю .jshintrc, он находится по пути: \ AppData \ Roaming \ Sublime Text 3 \ Packages \ JSHint Gutter, я помещаю "jquery": true и ничего не происходит.
Милош

Гораздо лучший ответ, чем добавление переменных в глобальный раздел! Решите это так!
Матиас Кляйн

16

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

1
Если вы установите для параметров "browser" и "node" значение "true", единственными необходимыми оставшимися элементами в этом списке являются $, jquery и angular. Для получения дополнительной информации см. Раздел «Окружающая среда» документации: jshint.com/docs/options/#environments
user456584

Я отредактировал ответ, включив ваше обновление, спасибо @ user456584
Джеймс Харрингтон

8

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

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


1
Также обратите внимание, что вы можете переопределить все внутренние конфигурации, установив флажок «использовать файл конфигурации». Это заставит WS видеть изменения файла конфигурации. Без этого он просто игнорирует это.
neoswf

3

Вместо того, чтобы рекомендовать обычное «отключение глобалов 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
Я также использую этот шаблон, но он не решает исходную проблему для меня. JSHint по-прежнему жалуется, что переменная не определена в последней строке ( "}(window))«в вашем примере - у меня были проблемы также с jQuery и Highcharts). Я не нашел способа отключить его, кроме определения глобального для файла, который затем побеждает цель.
Мирозия

@myrosia browser: trueсообщает JSHint, что вы ожидаете среду браузера (где windowона уже определена).
Сэм

Мне нравится этот подход!
Джетро

2

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

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

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


2

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.