uglify obfuscator es6 code javascript jquery minify

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:

  1. jquery.min.js
  2. jquery-ui.js
  3. cualquier complemento de terceros que estés cargando
  4. tu JS personalizado


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.