javascript - react - JSHint y jQuery: ''$'' no está definido
npm jshint (8)
Aquí hay una pequeña lista feliz para poner en tu .jshintrc
Añadiré a esta lista a medida que pase el tiempo.
{
// 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
},
}
El siguiente JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
Rendimientos:
test.js: line 5, col 3, ''$'' is not defined.
Cuando se alinea utilizando JSHint 0.5.5. ¿Algunas ideas?
En lugar de recomendar el habitual "apagar los JSHint globales", recomiendo usar el patrón del módulo para solucionar este problema. Mantiene su código "contenido" y le da un aumento de rendimiento (basado en "10 cosas que aprendí sobre Jquery de Paul Irish " ).
Tiendo a escribir mis patrones de módulo de esta manera:
(function (window) {
// Handle dependencies
var angular = window.angular,
$ = window.$,
document = window.document;
// Your application''s code
}(window))
Puede obtener estos otros beneficios de rendimiento (se explican más here ):
- Al reducir el código, la declaración de objeto de
window
pasada también se reduce. por ejemplo,window.alert()
convierte enm.alert()
. - El código dentro de la función anónima autoejecutable solo usa 1 instancia del objeto de
window
. - Se reduce al chase cuando se invoca una propiedad o método de
window
, lo que evita un recorrido costoso de la cadena de alcance, por ejemplo,window.alert()
(más rápido) frente al rendimiento dealert()
(más lento). - Ámbito local de funciones a través del "espacio de nombres" y la contención (los globales son malos). Si necesita dividir este código en scripts separados, puede hacer un submódulo para cada uno de esos scripts y hacer que se importen en un módulo principal.
Para corregir este error al utilizar la implementación JSHint en línea :
- Haga clic en "CONFIGURAR" (parte superior de la columna central de la página)
- Habilitar "jQuery" (debajo de la sección "ASUNCIAR" en la parte inferior)
Si está utilizando un editor IntelliJ, bajo
- Preferencias / Configuraciones
- Javascript
- Herramientas de calidad de código
- JSHint
- Predefinido (en la parte inferior), haga clic en Establecer
- JSHint
- Herramientas de calidad de código
- Javascript
Puede escribir cualquier cosa, por ejemplo, console:false
, y también se agregará a la lista (.jshintrc), como global.
Si está utilizando un editor de IntelliJ como WebStorm, PyCharm, RubyMine o IntelliJ IDEA:
En la sección Entornos de Archivo / Configuración / JavaScript / Herramientas de calidad de código / JSHint, haga clic en la casilla de verificación jQuery.
Si está utilizando una versión relativamente reciente de JSHint, el enfoque generalmente preferido es crear un archivo .jshintrc en la raíz de su proyecto y colocar esta configuración en él:
{
"globals": {
"$": false
}
}
Esto le declara a JSHint que $ es una variable global, y el falso indica que no se debe anular.
El archivo .jshintrc no era compatible con versiones realmente antiguas de JSHint (como v0.5.5 como la pregunta original en 2012). Si no puede o no quiere usar el archivo .jshintrc, puede agregar esto en la parte superior del archivo de script:
/*globals $:false */
También hay una opción jshint abreviada "jquery" como se ve en la página de opciones de JSHint ...
También puede agregar dos líneas a su .jshintrc
"globals": {
"$": false,
"jQuery": false
}
Esto le dice a jshint que hay dos variables globales.
Todo lo que necesitas hacer es establecer "jquery": true
en tu .jshintrc
.
Por la referencia de las opciones de JSHint :
jquery
Esta opción define globales expuestos por la biblioteca de jQuery JavaScript.