Надоедливое "JQMIGRATE: Migrate is..." в консоли после обновления до WordPress 4.5

24 апр. 2016 г., 12:48:11
Просмотры: 235K
Голосов: 69

Почему постоянно появляется уведомление,

JQMIGRATE: Migrate is installed, version 1.4.0

которое указывает на load-scripts.php в моей консоли после обновления темы до WordPress 4.5, и как его можно убрать?

Это не ошибка, но она всегда присутствует в моей консоли, и я действительно не понимаю, в чем её смысл. Нужно ли что-то обновить или внести изменения в мой код?

Возможно, у меня немного ОКР, но обычно когда я инспектирую сайт, я хочу видеть в консоли ошибки и реальные уведомления, указывающие на проблему...

РЕДАКТИРОВАНИЕ

WordPress 5.5 удалил скрипт jQuery Migrate как подготовительный шаг к обновлению jQuery до последней версии в 5.6. Так что уведомление должно исчезнуть.

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

3
Комментарии

+1 к вашему очень полезному OCD. Это, вероятно, происходит из скрипта миграции/обратной совместимости jQuery. Есть ли шанс, что вы используете неминифицированную/dev версию?

Mark Kaplun Mark Kaplun
24 апр. 2016 г. 13:12:27

Неминифицированная версия migrate? Нет, насколько я знаю, это могут быть какие-то плагины, но при проверке я ничего такого не вижу :\

dingo_d dingo_d
24 апр. 2016 г. 14:40:25

обратите внимание, что обе версии находятся в директориях WP: /wp-admin/js/jquery/jquery-migrate.js и /wp-admin/js/jquery/jquery-migrate.min.js

majick majick
25 апр. 2016 г. 12:40:07
Все ответы на вопрос 7
10
68

WordPress использует скрипт jQuery migrate для обеспечения обратной совместимости с любыми плагинами или темами, которые используют функциональность, удаленную из новых версий jQuery.

С выходом WordPress 4.5 версия jQuery migrate была обновлена с v1.2.1 до v1.4.0 - Быстрый просмотр кода показывает, что v1.4.0 записывает в лог загрузку скрипта независимо от того, установлена ли опция migrateMute, как в несжатой, так и в минифицированной версиях.

Единственный способ убрать это уведомление - убедиться, что код ваших плагинов/темы не зависит от старой функциональности jQuery, а затем удалить скрипт migrate. Существует плагин для этого, но это довольно простой метод, который можно просто разместить в файле functions.php вашей темы или подобном:

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

Обратите внимание, что это не считается лучшей практикой разработки WordPress, и, по моему мнению, скрипт migrate не следует удалять только ради очистки консоли разработчика.

24 апр. 2016 г. 14:41:33
Комментарии

То есть, по сути, один из моих плагинов зависит от функциональности, которая была частью старой версии jQuery? Есть ли способ выяснить, что это за функциональность? Или я могу безопасно отключить скрипт migrate?

dingo_d dingo_d
24 апр. 2016 г. 15:24:52

Я не могу с уверенностью сказать, зависят ли какие-либо из ваших плагинов от старой функциональности. WordPress просто включает скрипт migrate как безопасное решение по умолчанию на случай, если в вашей установке есть плагины, которые давно не обновлялись. На вашем месте я бы удалил скрипт migrate на локальной копии сайта и проверил, что всё работает как expected, убедившись, что в консоли нет ошибок.

Andy Andy
24 апр. 2016 г. 15:29:23

Я не рекомендую это делать. Эта обратная совместимость существует не просто так. Это jQuery-эквивалент удаления файла устаревших функций в WordPress. Все усилия по проверке совместимости вашей текущей конфигурации даже не учитывают возможные изменения настроек или добавление новых плагинов, и учитывая потенциальные проблемы, которые вы можете создать, это не оправдывает сомнительное преимущество удаления сообщения в консоли.

majick majick
25 апр. 2016 г. 10:54:07

@majick Обсуждение того, является ли удаление скрипта хорошей идеей или нет, выходит за рамки этого ответа. Этот ответ конкретно касается вопроса о том, как убрать сообщение в консоли. Честно говоря, я тоже считаю, что удалять скрипт - плохая идея. Я думаю, что минус неуместен, так как мой ответ идеально отвечает на вопрос автора.

Andy Andy
25 апр. 2016 г. 11:49:55

извините, я редко ставлю минусы, но здесь посчитал это необходимым, так как нет предупреждения о том, что это может быть плохой идеей и противоречит лучшим практикам разработки (добавьте предупреждение, и я уберу минус). Я считаю, что в вопросе спрашивается как убрать только сообщение в консоли, а не как удалить сам jquery migrate. Если бы кто-то спросил, как убрать сообщение об обновлении в WordPress, вы бы не ответили "просто удалите WordPress".

majick majick
25 апр. 2016 г. 12:10:50

@majick предупреждение добавлено. Вы правы в том, что в вопросе спрашивается, как убрать сообщение в консоли. В моем ответе указано, что единственный способ убрать сообщение - это удалить скрипт, что верно, если не идти по пути переписывания нативных функций браузера, как в вашем ответе.

Andy Andy
25 апр. 2016 г. 12:19:50

без проблем, минус убран. лично для меня, если бы это действительно раздражало, я бы предпочел просто закомментировать сообщение в файле migrate js при каждом обновлении WP, чем удалять его полностью. просто потому что javascript довольно капризный, иногда одна вещь не на месте, и почти все ломается... это слишком большой риск без какой-либо выгоды, когда это специально предусмотрено, чтобы избежать этого.

majick majick
25 апр. 2016 г. 12:27:50

Это сообщение об ошибке раздражает, но удалять его на каждом новом сайте - пустая трата времени. Было бы здорово, если бы где-то мы могли вежливо попросить разработчика, кто бы ни добавил это сообщение в WordPress, удалить его в следующем релизе :)

Ivan Topić Ivan Topić
21 июл. 2016 г. 12:03:03

@IvanTopić Оно было добавлено не разработчиками WordPress, а командой jQuery. Судя по всему, они не собираются его удалять: https://github.com/jquery/jquery-migrate/issues/149

Andy Andy
21 июл. 2016 г. 19:16:42

Отличная работа - вы ответили на вопрос автора без осуждения, но при этом указали, что это не является хорошей практикой. Сразу видно, что вы со Stack Overflow!

dewd dewd
7 июн. 2021 г. 18:48:17
Показать остальные 5 комментариев
8

Вы можете изменить текст сообщения журнала на пустой в файле jquery-migrate.min.js, но это не сохранится при обновлении ядра.

Альтернативный вариант - добавить сквозную/фильтрующую функцию-копию console.log непосредственно перед загрузкой скрипта migrate и указать ей игнорировать сообщения журнала, содержащие 'Migrate is installed'. Такой подход также сохранит другие предупреждения Migrate:

// скрипт глушителя
function jquery_migrate_silencer() {
    // создаем копию функции
    $silencer = '<script>window.console.logger = window.console.log; ';
    // модифицируем оригинальную функцию для фильтрации и использования копии функции
    $silencer .= 'window.console.log = function(tolog) {';
    // выходим если пусто, чтобы избежать ошибки
    $silencer .= 'if (tolog == null) {return;} ';
    // фильтруем сообщения, содержащие строку
    $silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
    $silencer .= 'console.logger(tolog);} ';
    $silencer .= '}</script>';
    return $silencer;
}

// для фронтенда используем фильтр 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();
        // добавляем перед загрузкой jquery migrate
        $tag = $silencer.$tag;
    }
    return $tag;
}

// для админки используем хук admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}

Результатом является добавление одной строки HTML-скрипта как во фронтенд, так и в административную часть, что достигает желаемого эффекта (предотвращает появление сообщения об установке.)

25 апр. 2016 г. 12:05:25
Комментарии

+1 за идею, но если это ваш сайт, вероятно, лучше просто убедиться, что все ваши скрипты совместимы с последней версией и удалить мигратор ;)

Mark Kaplun Mark Kaplun
25 апр. 2016 г. 12:11:50

да, но я просто не согласен с удалением мигратора как практикой в целом, потому что это не учитывает установку тем/плагинов, которые могут быть еще не совместимы с последней версией jQuery. Как параллель - есть множество плагинов, которые все еще работают нормально, даже несмотря на то, что некоторые функции WordPress "официально" считаются устаревшими. Обратная совместимость - это профилактика, и она лучше лечения, когда дело касается обоих случаев и, в общем, программного обеспечения.

majick majick
25 апр. 2016 г. 12:18:24

Вы правы, но отсутствие поддержки последней версии jquery - это ошибка, на мой взгляд. 4.5 перешла в стадию RC около месяца назад, и если код не был протестирован на работу со всеми внесенными изменениями, то тема/плагин на самом деле не являются полностью совместимыми. В мире за пределами WordPress сообщения об устаревании в какой-то момент превращаются в реальное устаревание, и вы не захотите откладывать их обработку до того момента, когда вам придется срочно обновляться. Мигратор, на мой взгляд, должен быть временным решением, а не постоянной функцией.

Mark Kaplun Mark Kaplun
25 апр. 2016 г. 12:29:19

Я согласен, что это временное решение, но именно поэтому сейчас это наиболее важно! Конечно, процесс устаревания внутри WordPress можно оптимизировать, но из-за небольшого размера deprecated.php сохранение старых псевдонимов функций, которые ссылаются на новые, практически не влияет на производительность и предотвращает поломки. Я предпочту хорошо написанный, но "старый" плагин "новому", но плохо написанному плагину в любой день. Идеология "новое лучше" не должна ломать иначе хорошо работающее программное обеспечение только потому, что "ой, мы изменили название этой функции" и т.д.

majick majick
25 апр. 2016 г. 12:37:25

Я не согласен с принципами, интернет - это быстро движущаяся цель, и ландшафт постоянно меняется. (к тому времени, когда функция логотипа сайта дошла до версии 4.5, например, сайты уже ушли от идеи иметь только один логотип). Старое хорошо только когда применяется к очень специфическим и стабильным нишам, но jQuery, например, известен как относительно подвижная цель.

Mark Kaplun Mark Kaplun
25 апр. 2016 г. 12:46:57

Я могу согласиться с тем, что мы не согласны. Просто потому, что есть прогресс и новые функции, это не причина отказываться от старых вещей, которые работают, будь то jQuery, WordPress или тема, или плагин, или что-либо еще... Тестом для любого кода должно быть "работает ли он" или "насколько он хорош", а не "насколько он стар"... и использование критерия "насколько он стар" для работающего программного обеспечения напрямую приводит к его ненужной поломке таким образом... когда новый код является самым багованным! Реалистично говоря, ожидать от разработчиков поддержания обновлений для чего-то, что иначе работало бы идеально - это просто слишком много - это убивает целые бизнесы.

majick majick
25 апр. 2016 г. 13:10:57

Тема - это не изолированный продукт. Если бы тема включала в себя WordPress и jQuery и т.д., тогда возраст темы имел бы полное значение. Поскольку ни одна тема этого не делает, если тема не была протестирована с используемой версией WordPress, то неясно, какие ошибки могут быть обнаружены. Это просто еще одно проявление дилеммы статической и динамической компоновки. В мире статической компоновки ваше утверждение в основном верно, но WordPress использует динамическую компоновку, и тот факт, что что-то работало с версией 3.5, не означает, что это будет работать с версией 4.5, даже при попытке сохранить обратную совместимость

Mark Kaplun Mark Kaplun
25 апр. 2016 г. 13:54:13

но давайте прекратим эту дискуссию здесь :), SE не радует её длина :)

Mark Kaplun Mark Kaplun
25 апр. 2016 г. 13:57:02
Показать остальные 3 комментариев
5

Небольшой тест.

Я заглянул в jquery-migrate.js и заметил эту часть:

// Установите true, чтобы предотвратить вывод в консоль; migrateWarnings по-прежнему поддерживается
// jQuery.migrateMute = false;

поэтому я протестировал следующее с помощью новой функции wp_add_inline_script(), представленной в версии 4.5:

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

Это изменит:

JQMIGRATE: Migrate установлен с активным логированием, версия 1.4.0

на:

JQMIGRATE: Migrate установлен, версия 1.4.0

Таким образом, это фактически не предотвращает весь вывод в консоль, как эта часть в jquery-migrate.js:

// Показать сообщение в консоли, чтобы разработчики знали, что мы активны
if ( window.console && window.console.log ) {
    window.console.log( "JQMIGRATE: Migrate is installed" +
        ( jQuery.migrateMute ? "" : " with logging active" ) +
        ", version " + jQuery.migrateVersion );
}
25 апр. 2016 г. 12:42:26
Комментарии

Значит нижний код просто убирает сообщение, верно? То есть, migrate остается, но сообщение подавляется, так? Это лучше, чем полностью удалять migrate

dingo_d dingo_d
25 апр. 2016 г. 12:47:50

нет, это копия кода, создающего сообщение в консоли, которое действительно выводится. Это показывает, что migrateMute проверяется только для второй половины сообщения консоли - первая половина выводится в любом случае... Удаление этого блока кода уберет сообщение консоли, но вам придется делать это заново после каждого обновления WP.

majick majick
25 апр. 2016 г. 12:56:26

Спасибо за исследование и подробности! На мой взгляд, это лучший вариант, так как удаление JQmigrate не всегда хорошая идея, потому что многие плагины WP зависят от устаревших функций jQuery. Это решение помогает немного очистить вывод консоли!

Philipp Philipp
28 апр. 2017 г. 20:39:08

Если вы также хотите удалить их в админке, вы можете дать анонимной функции имя и вызвать её как для wp_enqueue_scripts, так и для admin_enqueue_scripts.

Ian Dunn Ian Dunn
28 янв. 2021 г. 19:23:15

Спасибо за дополнительную информацию @IanDunn

birgire birgire
29 янв. 2021 г. 01:20:48
1

Решение:

добавьте это в 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 );

Это работает, когда jquery-migrate вызывается стандартным хуком (который выводит <link rel=stylesheet....>), а не через load-scripts.php в общей загрузке (как в панели администратора).

21 сент. 2018 г. 18:38:42
Комментарии

Для меня это хорошо работает. Спасибо!

Didierh Didierh
1 февр. 2020 г. 00:21:25
0

Просто измените консоль инспектора при необходимости

Вместо жесткого кодирования чего-либо на вашем сайте, большинство инспекторов предоставляют метод для локального редактирования вывода консоли.

Для Chrome и Opera

Используя консоль инспектора, вы можете кликнуть правой кнопкой мыши на предупреждение JQMIGRATE ... и нажать 'Скрыть сообщения из jquery-migrate.js'.

Фильтр консоли

Это добавит '-url:<YOUR_WORDPRESS_URL>/wp-includes/js/jquery/jquery-migrate.js?ver=3.3.2' в фильтр консоли. Эффективно исключая этот URL из вывода консоли.

Примечание: если вы копируете вышеуказанное в фильтры, замените <YOUR_WORDPRESS_URL> на ваш wp url

Этот фильтр консоли постоянно применяется также к новым вкладкам и окнам.

Safari

Для Safari вы можете легко создать локальное переопределение ответа в инспекторе.

Кликните правой кнопкой мыши на jquery-migrate.js:line справа от вывода консоли, затем выберите 'Создать локальное переопределение ответа'.

Это означает, что вы редактируете файл локально для целей разработки. Чтобы убрать эти уведомления о миграции, добавьте это в начало файла jquery-migrate.js в вашем локальном переопределении ответа.

/**
 * Локальное переопределение ответа
 */
jQuery.migrateMute = true;

Firefox

Локальные переопределения в настоящее время не поддерживаются. https://support.mozilla.org/en-US/questions/1331771

Фильтр вывода консоли на основе вкладки/окна

Введите -jquery-migrate.js в строку 'Фильтр вывода', и уведомления jQuery migrate исчезнут даже при перезагрузке вкладки.

Предупреждение: этот фильтр консоли нужно будет применять каждый раз при открытии новой вкладки или окна Firefox.

Надеюсь, это поможет!

28 мар. 2022 г. 00:18:22
2

Была такая же проблема, и выяснилось, что нужно просто установить SCRIPT_DEBUG в значение false в вашем wp-config.php. Надеюсь, это кому-то поможет

27 авг. 2018 г. 00:25:49
Комментарии

Это не сработало для меня.

Serj Sagan Serj Sagan
4 окт. 2018 г. 11:19:25

Это абсолютно не работает. Установка значения в true покажет, какие ошибки/логи будут выводиться в консоль, если кому-то интересно.

alphazwest alphazwest
11 мар. 2022 г. 00:48:41
0

2023

Этот комментарий из этого места:

Вот код, который отключает все console.trace:

<?php
​
function _jqmigrate_mute() {
  wp_add_inline_script('jquery-migrate', 'jQuery.migrateMute = true;', 'before');
}
​
add_action('wp_enqueue_scripts', '_jqmigrate_mute');
add_action('admin_enqueue_scripts', '_jqmigrate_mute');

Это не отключает начальное объявление, но в остальном экономит огромное количество места.

11 нояб. 2023 г. 02:18:10