Molesto "JQMIGRATE: Migrate is..." en la consola después de actualizar a WordPress 4.5
¿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/
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.

¿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?

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.

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 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.

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 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.

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.

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 :)

@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

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.)

+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 ;)

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.

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.

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.

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.

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.

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

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 );
}

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

no, eso es una copia del código que produce el mensaje de la consola que sí 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.

¡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!

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
.

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).

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!

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.
