javascript - obfuscator - minify js gulp
Unkeught TypeError: undefined no es una funciĆ³n al cargar jquery-min.js (13)
Estoy construyendo una página web normal que requiere que cargue aproximadamente cinco archivos CSS y diez archivos Javascript.
- Al cargarlos por separado en la página HTML, mi página web se carga bien.
Ahora para la producción, he concatenado todo el Javascript en un solo archivo, en el orden necesario, y todo el CSS en otro archivo. Pero cuando intento ejecutar la página web con los archivos concatenados, arroja un error que dice:
Uncaught TypeError: undefined is not a function
En la línea donde jquery.min.js se está cargando en el archivo concatenado de Javascript.
¿Qué puedo hacer para mitigar esto? Quiero concatenar todos los archivos y minimizarlos para producción. Por favor ayuda.
EDITAR: he combinado el Javascript y el CSS en el orden en que estaban cuando se cargaban individualmente y funcionaban bien.
Recuerde: las funciones de Javascript son CASE SENSITIVE.
Tuve un caso en el que estoy bastante seguro de que mi código funcionaría sin problemas. Pero aún así, obtuve un error y revisé la consola de Javascript de Google Chrome para verificar qué es.
Mi línea de error es
opt.SetAttribute("value",values[a]);
Y recibí el mismo mensaje de error:
Uncaught TypeError: undefined is not a function
Nada parece estar mal con el código anterior, pero no se estaba ejecutando. Soluciono problemas durante casi una hora y luego lo comparé con mi otro código de ejecución. Mi error es que se configuró en SetAttribute
, que debería ser setAttribute
.
Acabo de recibir el mismo mensaje con el siguiente código (en IcedCoffeeScript):
f = (err,cb) ->
cb null, true
await f defer err, res
console.log err if err
Esto me pareció un código ICS regular. Desplegué la construcción esperar-aplazar a CoffeeScript regular:
f (err,res) ->
console.log err if err
Lo que realmente sucedió fue que intenté pasar 1 función de devolución de llamada (con 2 parámetros) a la función f
esperando dos parámetros, efectivamente no estableciendo cb
dentro de f
, que el compilador informó correctamente como undefined is not a function
.
El error ocurrió porque pegué ciegamente el código repetitivo del estilo de devolución de llamada. f
no necesita un parámetro err
pasado a él, por lo tanto, simplemente debe ser:
f = (cb) ->
cb null, true
f (err,res) ->
console.log err if err
En el caso general, recomendaría verificar las firmas de función y las invocaciones para comparar aries. La pila de llamadas en el mensaje de error debería ser capaz de proporcionar consejos útiles.
En su caso especial, recomiendo buscar las definiciones de funciones que aparecen dos veces en el archivo fusionado, con diferentes firmas o asignaciones a variables globales que contienen funciones.
Asegúrate de haber comentado cualquier comentario. Algunas veces, al copiar y pegar, dejará fuera el "/ *!"
Además, cuando ingrese a la consola, enumerará sus errores y deberá tomarlos de a uno por vez. Si ve "Símbolo de sintaxis no capturada: Token inesperado *" Eso podría significar que está leyendo su archivo js y no está pasando la primera línea.
/ *! * jquery.tools 1.1.2 - La biblioteca de IU faltante para la Web * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * Archivo generado: mié oct 07 09:40:16 GMT 2009 * /
En caso de que haya algún imbécil como yo, tuve este problema frustrante porque olvidé un simple
new
palabra clave antes de crear un nuevo objeto.
Es posible que deba volver a verificar el orden en que está fusionando los archivos, debería ser algo así como:
- jquery.min.js
- jquery-ui.js
- cualquier complemento de terceros que estés cargando
- tu JS personalizado
Esta solución funcionó para mí
;(function($){ // your code })(jQuery);
Mueva su código dentro del cierre y use $ en lugar de jQuery
Encontré la solución anterior en https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
después de serrar demasiado
Lo obtuve cuando accidentalmente pasé demasiados parámetros en una función jquery que solo esperaba un parámetro de devolución de llamada.
Para otros, solución de problemas: asegúrese de verificar todas las llamadas a la función jquery para obtener parámetros adicionales.
Me he encontrado con el mismo problema, cuando se nombra erróneamente variable con el mismo nombre, como función.
Así que esto:
isLive = isLive(data);
falló, generando el mensaje de error mencionado de OP.
La solución a esto fue tan simple como cambiar la línea anterior a:
isItALive = isLive(data);
No sé, ¿cuánto ayuda en esta situación, pero decidí poner esta respuesta para otros que buscan una solución para problemas similares?
Obtuve el mismo error al tener dos referencias a diferentes versiones de jQuery.
En mi página maestra:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
Y también en la página:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script>
Para aquellos que todavía no podían arreglar esto, lo hice cambiando mi ''esto'' a ''$ (esto)'' cuando uso jQuery.
P.EJ:
$(''.icon'').click(function() {
this.fadeOut();
});
Fijo:
$(''.icon'').click(function() {
$(this).fadeOut();
});
Recientemente tuve este problema con el complemento jQuery Validation , usando Squishit , obteniendo también el error js:
"indefinido no es una función"
Lo arreglé cambiando la referencia al archivo jquery.validate.js no minificado, en lugar de jquery.validate.min.js.
@MvcHtmlString.Create(
@SquishIt.Framework.Bundle.JavaScript()
.Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
.Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
.Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
.Add("~/Scripts/Libraries/jquery.validate.js")
.Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
... more files
Creo que la versión minimizada de ciertos archivos, cuando se comprime aún más usando Squishit, por ejemplo, en algunos casos podría no tratarse con los puntos y comas que faltan, como sugiere @Dustin, por lo que podría tener que experimentar con qué archivos puede doblemente comprimido, y que acaba de dejar a Squishit o lo que sea con lo que se une.
Sí, también lo arreglé cambiando en las bibliotecas js a las unificadas.
Por ejemplo, en la etiqueta, cambie:
<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>
Por:
<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>
Cerrando el ''min'' como no minificado.
Gracias por la idea
Suponiendo que este problema aún no se haya resuelto, muchos archivos individuales no terminan su código con un punto y coma. La mayoría de los scripts de jQuery terminan con (jQuery)
y usted debe tener (jQuery);
.
Como archivos separados, el script se cargará bien, pero como un archivo individual necesita el punto y coma.