Molesto "JQMIGRATE: Migrate is..." en la consola después de actualizar a WordPress 4.5

24 abr 2016, 12:48:11
Vistas: 235K
Votos: 69

¿Por qué hay una notificación constante,

JQMIGRATE: Migrate is installed, version 1.4.0

que apunta a load-scripts.php en mi consola cuando actualicé mi tema a WordPress 4.5, y cómo se puede eliminar?

No es un error, pero está siempre presente en mi consola, y realmente no veo cuál es el propósito. ¿Debería actualizar algo o hacer algunos cambios en mi código?

Quizás tengo un poco de TOC, pero usualmente cuando inspecciono el sitio, me gusta ver errores y notificaciones reales que señalen un problema en mi consola...

EDICIÓN

WordPress 5.5 eliminó el script jQuery Migrate, como paso preparatorio para actualizar jQuery a la última versión en 5.6. Así que la notificación debería haber desaparecido.

https://make.wordpress.org/core/2020/06/29/updating-jquery-version-shipped-with-wordpress/

3
Comentarios

+1 a tu útil TOC. Esto probablemente viene del script de migración/compatibilidad hacia atrás de jQuery. ¿Hay alguna posibilidad de que uses la versión sin minificar/desarrollo?

Mark Kaplun Mark Kaplun
24 abr 2016 13:12:27

¿Versión sin minificar de migrate? No que yo sepa, podrían ser algunos plugins, pero al inspeccionarlo no veo nada de eso :\

dingo_d dingo_d
24 abr 2016 14:40:25

nota que ambas versiones están en los directorios de WP: /wp-admin/js/jquery/jquery-migrate.js y /wp-admin/js/jquery/jquery-migrate.min.js

majick majick
25 abr 2016 12:40:07
Todas las respuestas a la pregunta 7
10
68

WordPress utiliza el script jQuery migrate para garantizar la compatibilidad con versiones anteriores de cualquier plugin o tema que puedas estar utilizando que use funcionalidades eliminadas de las versiones más recientes de jQuery.

Con el lanzamiento de WordPress 4.5, parece que han actualizado la versión de jQuery migrate de v1.2.1 a v1.4.0 - Al revisar rápidamente el código, se revela que v1.4.0 registra que el script está cargado independientemente de si la opción migrateMute está establecida o no, tanto en las versiones sin comprimir como en las minificadas.

La única forma de eliminar la notificación es asegurarse de que todo el código de tus plugins/tema no dependa de ninguna funcionalidad antigua de jQuery, y luego eliminar el script migrate. Existe un plugin para hacer esto, pero es un método bastante simple que puede colocarse en el archivo functions.php de tu tema o similar:

add_action('wp_default_scripts', function ($scripts) {
    if (!empty($scripts->registered['jquery'])) {
        $scripts->registered['jquery']->deps = array_diff($scripts->registered['jquery']->deps, ['jquery-migrate']);
    }
});

Ten en cuenta que esto no se considera una mejor práctica para el desarrollo en WordPress y, en mi opinión, el script migrate no debería eliminarse solo para mantener limpia la consola del desarrollador.

24 abr 2016 14:41:33
Comentarios

¿Entonces básicamente uno de mis plugins depende de una funcionalidad que era parte de la versión antigua de jQuery? ¿Hay alguna manera de averiguar cuál es esa funcionalidad? ¿O es seguro simplemente silenciar el script de migración?

dingo_d dingo_d
24 abr 2016 15:24:52

No puedo asegurar si alguno de tus plugins depende de funcionalidades antiguas, WordPress simplemente incluye el script de migración como una medida de seguridad predeterminada en caso de que tu instalación tenga plugins que no se hayan actualizado en un tiempo. Si fuera yo, eliminaría el script de migración en una instalación local del sitio y luego verificaría que todo sigue funcionando como se espera, asegurándome de que no hay errores en la consola, etc.

Andy Andy
24 abr 2016 15:29:23

No recomiendo hacer esto. Esta compatibilidad hacia atrás existe por una razón. Es el equivalente en jQuery de eliminar el archivo de funciones obsoletas en WordPress. Tomarse la molestia de verificar si tu configuración actual es totalmente compatible ni siquiera tiene en cuenta los cambios de configuración o adiciones de plugins, y dados los problemas potenciales que estarías creando, no compensa el beneficio completamente dudoso de eliminar un mensaje de la consola.

majick majick
25 abr 2016 10:54:07

@majick Está más allá del alcance de esta respuesta discutir si eliminar el script es una buena idea o no, esto específicamente aborda el tema de cómo eliminar el mensaje en la consola. Para que conste, creo que eliminar el script es una mala idea también. Creo que el voto negativo no está justificado, ya que mi respuesta responde perfectamente a la pregunta del OP.

Andy Andy
25 abr 2016 11:49:55

lo siento, no suelo dar votos negativos a menudo, pero sentí que era necesario aquí ya que no hay ninguna advertencia de que esto podría no ser una buena idea y es lo opuesto a las mejores prácticas en desarrollo (agrega una advertencia y removeré el voto negativo). Creo que la pregunta está pidiendo cómo eliminar solo el mensaje de la consola, no cómo eliminar jquery migrate en sí. Si alguien preguntara cómo eliminar el mensaje molesto de actualización en WordPress, no responderías "simplemente desinstala WordPress".

majick majick
25 abr 2016 12:10:50

@majick advertencia agregada. Tienes razón en que la pregunta está pidiendo cómo eliminar el mensaje de la consola, mi respuesta indica que la única manera de eliminar el mensaje es eliminar el script, lo cual es cierto a menos que sigas el camino de reescribir las funciones nativas del navegador como en tu respuesta.

Andy Andy
25 abr 2016 12:19:50

no hay problema, voto negativo eliminado. en lo personal, si realmente me molestara, preferiría simplemente comentar el mensaje en el archivo migrate js en cada actualización de WP en lugar de eliminarlo por completo. esto es porque JavaScript es bastante temperamental, a veces una cosa fuera de lugar y casi todo se rompe... es demasiado riesgo sin beneficio cuando esto está específicamente implementado para evitar eso.

majick majick
25 abr 2016 12:27:50

Este mensaje de error es molesto pero eliminarlo en cada nuevo sitio es una pérdida de tiempo. Sería genial si en algún lugar pudiéramos pedirle amablemente a un desarrollador que puso el mensaje en WordPress que lo elimine en la próxima versión :)

Ivan Topić Ivan Topić
21 jul 2016 12:03:03

@IvanTopić No fue agregado por ningún desarrollador de WordPress, fue agregado por el equipo de jQuery. Por lo que parece, tampoco es algo que vayan a eliminar: https://github.com/jquery/jquery-migrate/issues/149

Andy Andy
21 jul 2016 19:16:42

¡Bien hecho por responder la pregunta del OP sin juzgar, pero señalando que no es una buena práctica. ¡Se nota que eres un usuario de Stack Overflow!

dewd dewd
7 jun 2021 18:48:17
Mostrar los 5 comentarios restantes
8

Podrías cambiar el texto del mensaje de registro a blanco en jquery-migrate.min.js pero esto no se conservará cuando se actualice el core.

La alternativa es agregar una función de paso/filtro que copie console.log justo antes de que se cargue el script migrate, e indicarle que ignore los mensajes de registro que contengan 'Migrate is installed'. Haciéndolo de esta manera se conservarán también otras advertencias de Migrate:

// script silenciador
function jquery_migrate_silencer() {
    // crear copia de la función
    $silencer = '<script>window.console.logger = window.console.log; ';
    // modificar función original para filtrar y usar la copia de la función
    $silencer .= 'window.console.log = function(tolog) {';
    // salir si está vacío para prevenir error
    $silencer .= 'if (tolog == null) {return;} ';
    // filtrar mensajes que contengan la cadena
    $silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
    $silencer .= 'console.logger(tolog);} ';
    $silencer .= '}</script>';
    return $silencer;
}

// para el frontend, usar el filtro script_loader_tag
add_filter('script_loader_tag','jquery_migrate_load_silencer', 10, 2);
function jquery_migrate_load_silencer($tag, $handle) {
    if ($handle == 'jquery-migrate') {
        $silencer = jquery_migrate_silencer();
        // anteponer al cargar jquery migrate
        $tag = $silencer.$tag;
    }
    return $tag;
}

// para el admin, enganchar a admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}

El resultado es una línea de script HTML agregada tanto al frontend como al backend que logra el efecto deseado (evita el mensaje de instalación.)

25 abr 2016 12:05:25
Comentarios

+1 por la idea, pero si es tu sitio, probablemente sea mejor asegurarte de que todos tus scripts sean compatibles con la última versión y eliminar el migrador ;)

Mark Kaplun Mark Kaplun
25 abr 2016 12:11:50

sí, pero simplemente no estoy de acuerdo con eliminar el migrador como práctica en general porque no tiene en cuenta la instalación de temas/plugins que pueden no ser compatibles con el último jQuery todavía. Como paralelo, hay muchos plugins que siguen funcionando bien aunque puede que no se hayan dado cuenta de que una función de WordPress aquí o allá está "oficialmente" obsoleta. La compatibilidad hacia atrás es prevención y mejor que una cura cuando se trata de ambos casos y, bueno, del software en general.

majick majick
25 abr 2016 12:18:24

Tienes razón, pero no soportar la última versión de jQuery es un error en mi opinión. La 4.5 entró en RC hace aproximadamente un mes, y si el código no fue probado para funcionar con todos los cambios que introdujo, entonces el tema/plugin no es verdaderamente compatible. En el mundo fuera de WordPress los mensajes de obsolescencia se convierten en obsolescencia real en algún momento, y no querrás dejar el manejo de estos hasta el momento en que tengas que actualizar lo antes posible. El migrador, en mi opinión, debería ser una solución temporal, no una característica permanente.

Mark Kaplun Mark Kaplun
25 abr 2016 12:29:19

Estoy de acuerdo en que es una solución temporal, pero precisamente por eso, ahora es cuando es más importante. Seguramente el proceso de obsolescencia dentro de WordPress podría optimizarse, pero dado el pequeño tamaño de deprecated.php, realmente tiene poco impacto en el rendimiento mantener los antiguos alias de funciones que se refieren a las nuevas y evita que las cosas se rompan. Prefiero un plugin bien programado pero "antiguo" a uno "nuevo" pero mal programado cualquier día. La ideología de "lo nuevo es mejor" no debería romper software que funciona correctamente solo porque "oh, cambiamos el nombre de esa función", etc.

majick majick
25 abr 2016 12:37:25

Discrepo en los principios aquí, internet es un objetivo en constante movimiento y el panorama está cambiando todo el tiempo. (para cuando la función del logo del sitio llegó a la versión 4.5 por ejemplo, los sitios ya habían evolucionado más allá de la idea de tener un solo logo). Lo antiguo es bueno solo cuando se aplica a nichos muy específicos y estables, pero jQuery por ejemplo es conocido por ser un objetivo relativamente cambiante.

Mark Kaplun Mark Kaplun
25 abr 2016 12:46:57

Puedo aceptar estar en desacuerdo. El hecho de que haya progreso y nuevas características no es razón para abandonar las cosas antiguas que funcionan, ya sea jQuery, WordPress o un tema o un plugin o lo que sea... La prueba de cualquier código debería ser "¿funciona?" o "¿qué tan bueno es?" no "¿qué tan antiguo es?"... y usar "qué tan antiguo es" como vara de medir para el software que funciona resulta directamente en romperlo innecesariamente de esta manera... ¡cuando el código nuevo es el que tiene más errores! Realisticamente, esperar que los desarrolladores se mantengan al día con actualizaciones para algo que seguiría funcionando perfectamente de otro modo es demasiado - mata negocios enteros.

majick majick
25 abr 2016 13:10:57

Un tema no es un producto aislado. Si un tema estuviera empaquetando WordPress y jQuery, etc., entonces la antigüedad del tema habría sido totalmente relevante. Como ningún tema hace eso, si el tema no fue probado con la versión de WordPress que se está usando, entonces no está suficientemente claro qué tipo de errores se descubrirán. Esto es solo otra manifestación del dilema de enlazado estático vs dinámico. En un mundo de enlazado estático tu afirmación es mayormente cierta, pero WordPress utiliza enlazado dinámico y el hecho de que algo haya funcionado con la versión 3.5 no significa que funcionará con la 4.5 incluso con el intento de mantener la compatibilidad hacia atrás

Mark Kaplun Mark Kaplun
25 abr 2016 13:54:13

pero detengamos esta discusión aquí :), a SE no le agrada la extensión de la misma :)

Mark Kaplun Mark Kaplun
25 abr 2016 13:57:02
Mostrar los 3 comentarios restantes
5

Aquí hay una pequeña prueba.

Eché un vistazo a jquery-migrate.js y noté esta parte:

// Establecer a true para prevenir la salida en consola; migrateWarnings aún se mantiene
// jQuery.migrateMute = false;

así que probé lo siguiente con la nueva función wp_add_inline_script(), introducida en la versión 4.5:

add_action( 'wp_enqueue_scripts', function()
{   
    wp_add_inline_script( 
        'jquery-migrate', 'jQuery.migrateMute = true;',
        'before' 
    );
} );

Esto cambiará:

JQMIGRATE: Migrate está instalado con registro activo, versión 1.4.0

a:

JQMIGRATE: Migrate está instalado, versión 1.4.0

Así que realmente no previene toda la salida en consola, como esta parte en jquery-migrate.js:

// Mostrar un mensaje en la consola para que los desarrolladores sepan que estamos activos
if ( window.console && window.console.log ) {
    window.console.log( "JQMIGRATE: Migrate está instalado" +
        ( jQuery.migrateMute ? "" : " con registro activo" ) +
        ", versión " + jQuery.migrateVersion );
}
25 abr 2016 12:42:26
Comentarios

Entonces el código de abajo solo elimina el mensaje, ¿verdad? Es decir, el migrate permanece pero el mensaje se suprime, ¿correcto? Esto es mejor que eliminar el migrate definitivamente

dingo_d dingo_d
25 abr 2016 12:47:50

no, eso es una copia del código que produce el mensaje de la consola que muestra la salida. muestra que migrateMute solo se prueba para la segunda mitad del mensaje de la consola - la primera mitad se muestra independientemente... eliminar este bloque de código eliminará el mensaje de la consola, pero necesitarías rehacerlo en cada actualización de WP.

majick majick
25 abr 2016 12:56:26

¡Gracias por la investigación y los detalles! En mi opinión, es la mejor opción, ya que eliminar JQmigrate no siempre es una buena idea, porque muchos plugins de WP dependen de funciones obsoletas de jQuery. ¡Esta solución ayuda a limpiar un poco la salida de la consola!

Philipp Philipp
28 abr 2017 20:39:08

Si también quieres eliminarlos en el admin, puedes darle un nombre a la función anónima y llamarla tanto en wp_enqueue_scripts como en admin_enqueue_scripts.

Ian Dunn Ian Dunn
28 ene 2021 19:23:15

Gracias por la información adicional @IanDunn

birgire birgire
29 ene 2021 01:20:48
1

Solución:

añade esto a functions.php:

function remove_jquery_migrate_notice() {
    $m= $GLOBALS['wp_scripts']->registered['jquery-migrate'];
    $m->extra['before'][]='temp_jm_logconsole = window.console.log; window.console.log=null;';
    $m->extra['after'][]='window.console.log=temp_jm_logconsole;';
}
add_action( 'init', 'remove_jquery_migrate_notice', 5 );

Esto funciona cuando jquery-migrate es llamado con el gancho estándar (que genera <link rel=stylesheet....>) y no con load-scripts.php de forma masiva (como en el panel de administración).

21 sept 2018 18:38:42
Comentarios

Esto funciona bien para mí. ¡Gracias!

Didierh Didierh
1 feb 2020 00:21:25
0

Simplemente modifica tu Consola del Inspector cuando sea necesario

En lugar de codificar directamente en tu sitio web, la mayoría de los inspectores te proporcionan métodos para editar la salida de la consola localmente.

Para Chrome y Opera

Usando la consola del inspector puedes hacer clic derecho en la advertencia JQMIGRATE ... y hacer clic en 'Ocultar mensajes de jquery-migrate.js'.

Filtro de Consola

Esto añadirá '-url:<TU_URL_WORDPRESS>/wp-includes/js/jquery/jquery-migrate.js?ver=3.3.2' al filtro de la consola. Efectivamente eliminando esta URL de la salida de la consola.

Nota: si copias lo anterior a los filtros, cambia <TU_URL_WORDPRESS> por tu URL de WordPress

Este filtro de consola se aplica de forma persistente a las nuevas pestañas y ventanas también.

Safari

Para Safari puedes crear una Anulación Local de Respuesta del inspector bastante fácilmente.

Haz clic derecho en la línea jquery-migrate.js:line a la derecha de las salidas del registro de la consola, luego selecciona 'Crear Anulación Local de Respuesta'.

Esto significa que editas el archivo localmente para propósitos de desarrollo. Para eliminar estos avisos de migración, añade esto en la parte superior del archivo jquery-migrate.js en tu Anulación Local de Respuesta.

/**
 * Anulación Local de Respuesta
 */
jQuery.migrateMute = true;

Firefox

Las anulaciones locales no están soportadas actualmente. https://support.mozilla.org/en-US/questions/1331771

Filtro de salida de Consola basado en Pestaña/Ventana

Escribe -jquery-migrate.js en la barra 'Filtrar Salida' y los avisos de jQuery migrate desaparecerán incluso al recargar la pestaña.

Advertencia: este filtro de consola deberá aplicarse cada vez que abras una nueva pestaña o ventana de Firefox.

¡Espero que esto ayude!

28 mar 2022 00:18:22
2

Tuve el mismo problema, y descubrí que solo necesitas establecer SCRIPT_DEBUG como false en tu archivo wp-config.php. Espero que esto ayude a alguien

27 ago 2018 00:25:49
Comentarios

Eso no funcionó para mí.

Serj Sagan Serj Sagan
4 oct 2018 11:19:25

Esto definitivamente no funciona. Habilitarlo a true mostrará qué errores/registros aparecerán en la consola, por si alguien tiene curiosidad.

alphazwest alphazwest
11 mar 2022 00:48:41
0

2023

Este comentario de aquí:

Aquí hay algo que deshabilita todos los console.trace:

<?php
​
// Función para silenciar los mensajes de jQuery Migrate
function _jqmigrate_mute() {
  wp_add_inline_script('jquery-migrate', 'jQuery.migrateMute = true;', 'before');
}
​
// Agregar la función para el frontend
add_action('wp_enqueue_scripts', '_jqmigrate_mute');
// Agregar la función para el panel de administración
add_action('admin_enqueue_scripts', '_jqmigrate_mute');

No silencia el anuncio inicial, pero ahorra una gran cantidad de espacio en la consola de lo contrario.

11 nov 2023 02:18:10