वर्डप्रेस 4.5 के अपडेट के बाद कंसोल में "JQMIGRATE: माइग्रेट है ..." ऐनायिंग


53

लगातार नोटिस क्यों है,

JQMIGRATE: माइग्रेट स्थापित है, संस्करण 1.4.0

load-scripts.phpजब मैं वर्डप्रेस 4.5 पर अपनी थीम को अपडेट करता हूं, तो यह मेरे कंसोल पर इंगित करता है, और इसे कैसे हटाया जा सकता है?

यह एक त्रुटि नहीं है, लेकिन यह हमेशा मेरे कंसोल में मौजूद है, और मैं वास्तव में नहीं देखता कि इसका क्या मतलब है। क्या मुझे कुछ अपडेट करना चाहिए, या अपने कोड में कुछ बदलाव करने चाहिए?

शायद मेरे पास ओसीडी का एक सा है, लेकिन आमतौर पर जब मैं साइट का निरीक्षण करता हूं, तो मुझे त्रुटियों और वास्तविक नोटिसों को देखना पसंद है जो मेरे कंसोल में एक मुद्दे को इंगित करते हैं ...


आपके बहुत उपयोगी OCD के लिए +1। यह संभवतः jquery प्रवासन / पिछड़ी संगतता स्क्रिप्ट से आता है। किसी भी मौका आप unminified / देव संस्करण का उपयोग करें?
मार्क कप्लून

माइग्रेट का अज्ञात संस्करण? नहीं नहीं मेरी जानकारी के लिए, यह कुछ प्लग-इन किया जा सकता है, लेकिन जांच करने पर मैं इसके बारे में कुछ भी दिखाई न: \
dingo_d

1
ध्यान दें कि दोनों संस्करण WP dirs में हैं: /wp-admin/js/jquery/jquery-migrate.jsऔर/wp-admin/js/jquery/jquery-migrate.min.js
majick

जवाबों:


50

वर्डप्रेस jQuery माइग्रेट स्क्रिप्ट का उपयोग करता है जो आपके द्वारा उपयोग किए जा रहे किसी भी प्लगइन्स या थीम के लिए बैकवर्ड संगतता सुनिश्चित करने के लिए हो सकता है जो jQuery के नए संस्करणों से हटाए गए कार्यक्षमता का उपयोग करें।

वर्डप्रेस 4.5 के रिलीज के साथ, ऐसा प्रतीत होता है कि उन्होंने v1.2.1 से v1.4.0 तक jQuery के माइग्रेशन के संस्करण को अपग्रेड किया है - कोड के माध्यम से एक त्वरित स्कैन होने से पता चलता है कि v1.4.0 लॉग करता है कि स्क्रिप्ट की परवाह किए बिना लोड किया गया है या नहीं। migrateMuteविकल्प सेट और असम्पीडित और छोटा दोनों संस्करणों में है।

नोटिस को हटाने का एकमात्र तरीका यह है कि आपके सभी प्लगइन्स / थीम कोड किसी भी पुराने jQuery की कार्यक्षमता पर निर्भर न हों और फिर माइग्रेट स्क्रिप्ट को हटा दें। ऐसा करने के लिए वहाँ एक प्लगइन है, लेकिन यह काफी सरल विधि है जिसे बस आपके विषय के फ़ंक्शन फ़ाइल या समान में रखा जा सकता है:

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

कृपया ध्यान दें कि यह वर्डप्रेस विकास के लिए सबसे अच्छा अभ्यास नहीं माना जाता है और मेरी राय में माइग्रेट स्क्रिप्ट को केवल डेवलपर कंसोल को साफ रखने के लिए नहीं हटाया जाना चाहिए।


तो मूल रूप से मेरा एक प्लगइन्स एक कार्यक्षमता पर निर्भर करता है जो पुराने jQuery संस्करण का एक हिस्सा था? क्या यह पता लगाने का एक तरीका है कि कार्यक्षमता क्या है? या मैं सिर्फ माइग्रेट स्क्रिप्ट को म्यूट करने के लिए सुरक्षित हूं?
डिंगो_ड

1
मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि क्या आपका कोई प्लगइन्स पुरानी कार्यक्षमता पर निर्भर है, वर्डप्रेस सिर्फ एक सुरक्षित डिफ़ॉल्ट के रूप में माइग्रेट स्क्रिप्ट को शामिल करता है यदि आपके इंस्टॉल में कोई प्लग इन है जिसे थोड़ी देर में अपडेट नहीं किया गया है। अगर यह होता तो मैं साइट के एक स्थानीय इंस्टॉलेशन पर माइग्रेट स्क्रिप्ट को हटा देता और फिर सब कुछ जांचता, फिर भी उम्मीद के मुताबिक काम करता, यह सुनिश्चित करता कि कंसोल में कोई त्रुटि नहीं है आदि
एंडी

मैं इसके खिलाफ सलाह देता हूं। यह पीछे की संगतता एक कारण के लिए है। यह वर्डप्रेस में पदावनत कार्य फ़ाइल को हटाने के लिए jQuery के बराबर है। यह सत्यापित करने की सभी समस्या के लिए कि क्या आपका वर्तमान सेटअप पूरी तरह से संगत है, सेटअप या प्लगइन परिवर्धन के परिवर्तनों का भी हिसाब नहीं रखता है, और आपके द्वारा बनाई जा रही संभावित समस्याओं को देखते हुए कंसोल लॉग संदेश को हटाने के पूरी तरह से संदिग्ध लाभ के खिलाफ संतुलन नहीं है। ।
मजिक

1
@ मैजिक यह इस उत्तर के दायरे से परे है कि स्क्रिप्ट को हटाना एक अच्छा विचार है या नहीं, यह विशेष रूप से कंसोल में संदेश को हटाने के मुद्दे को संबोधित करता है। FWIW, मुझे लगता है कि स्क्रिप्ट को हटाना भी एक बुरा विचार है। मुझे लगता है कि डाउनवोट के लिए बिना रुकावट है, क्योंकि मेरा जवाब पूरी तरह से ओपी सवाल का जवाब देता है।
एंडी

1
क्षमा करें मैं अक्सर डाउनवोट नहीं होता, लेकिन यह महसूस किया गया कि यहां इसकी आवश्यकता थी क्योंकि कोई चेतावनी नहीं है कि यह एक अच्छा विचार नहीं हो सकता है और विकास में सर्वोत्तम अभ्यास के विपरीत है (एक चेतावनी जोड़ें और मैं डाउनवोट को हटा दूंगा।) विश्वास करें कि सवाल यह पूछ रहा है कि सिर्फ सांत्वना संदेश को कैसे हटाया जाए न कि जेकरी को कैसे हटाया जाए। अगर किसी ने पूछा कि वर्डप्रेस में अपडेट नाग संदेश को कैसे हटाया जाए तो आप जवाब नहीं देंगे "बस वर्डप्रेस की स्थापना रद्द करें।"
माजिक

11

आप लॉग संदेश पाठ को रिक्त करने के लिए बदल सकते हैं jquery-migrate.min.jsलेकिन इसे कोर अपडेट पर संरक्षित नहीं किया जाएगा।

विकल्प यह है console.logकि माइग्रेट स्क्रिप्ट लोड होने से ठीक पहले passthrough / filter function copy जोड़ें , और इसे लॉगिंग संदेशों को अनदेखा करने के लिए कहें जिसमें ' Migrate is installed' शामिल हैं । इस तरह से करने से अन्य माइग्रेट चेतावनी भी सुरक्षित रहेगी:

// silencer script
function jquery_migrate_silencer() {
    // create function copy
    $silencer = '<script>window.console.logger = window.console.log; ';
    // modify original function to filter and use function copy
    $silencer .= 'window.console.log = function(tolog) {';
    // bug out if empty to prevent error
    $silencer .= 'if (tolog == null) {return;} ';
    // filter messages containing string
    $silencer .= 'if (tolog.indexOf("Migrate is installed") == -1) {';
    $silencer .= 'console.logger(tolog);} ';
    $silencer .= '}</script>';
    return $silencer;
}

// for the frontend, use script_loader_tag filter
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();
        // prepend to jquery migrate loading
        $tag = $silencer.$tag;
    }
    return $tag;
}

// for the admin, hook to admin_print_scripts
add_action('admin_print_scripts','jquery_migrate_echo_silencer');
function jquery_migrate_echo_silencer() {echo jquery_migrate_silencer();}

परिणाम एचटीएमएल स्क्रिप्ट की एक पंक्ति है, जो फ्रंटएंड और बैकएंड दोनों में जोड़ा जाता है जो वांछित प्रभाव को प्राप्त करता है (स्थापित संदेश को रोकता है।)


1
विचार के लिए +1, लेकिन यदि यह आपकी साइट है, तो संभवतः यह सुनिश्चित करना बेहतर है कि आपकी सभी स्क्रिप्ट नवीनतम संस्करण के अनुकूल हैं और माइग्रेटर को हटा दें;)
मार्क कप्लुन

हाँ, लेकिन मैं बस एक अभ्यास के रूप में प्रवासी को हटाने से सहमत नहीं हूं क्योंकि यह उन विषयों / प्लगइन्स को स्थापित करने में ध्यान नहीं देता है जो अभी तक नवीनतम jQuery के साथ संगत नहीं हो सकते हैं। एक पैरलल के रूप में बहुत सारे प्लगइन्स हैं जो अभी भी ठीक काम करते हैं, भले ही उन्हें यहां एक वर्डप्रेस फ़ंक्शन का एहसास नहीं हुआ हो या फिर "आधिकारिक तौर पर" हटा दिया गया हो। पश्चगामी संगतता रोकथाम और इलाज से बेहतर है जब यह दोनों मामलों और अच्छी तरह से आता है, सामान्य रूप से सॉफ्टवेयर।
माजिक

2
आप सही हैं, लेकिन नवीनतम jquery संस्करण का समर्थन नहीं करना बग बग है। 4.5 एक महीने पहले आरसी में गया था, और यदि कोड को उन सभी परिवर्तनों के साथ काम करने के लिए परीक्षण नहीं किया गया था, तो थीम / प्लगइन वास्तव में संगत नहीं हैं। बाहर की दुनिया में वर्डप्रेस डिप्रेसेशन मैसेज कुछ बिंदु पर वास्तविक डेप्रिसिएशन में बदल जाते हैं, और आप उन्हें उस समय तक हैंडल नहीं छोड़ना चाहते हैं जहां आपको एएसएपी को अपग्रेड करना है। प्रवासी आईएमओ एक अस्थायी समाधान होना चाहिए, न कि एक स्थायी सुविधा।
मार्क कप्लून

2
मैं यहां के प्रधानाचार्यों से असहमत हूं, इंटरनेट एक तेजी से आगे बढ़ने वाला लक्ष्य है और परिदृश्य हर समय बदल रहा है। (उदाहरण के लिए साइट लोगो फीचर को 4.5 पर लाने के लिए समय तक, साइटें केवल एक लोगो होने के विचार से आगे बढ़ी थीं)। बहुत अच्छा है जब केवल बहुत विशिष्ट और स्थिर niches के लिए लागू किया जाता है, लेकिन उदाहरण के लिए jQuery एक अपेक्षाकृत चलती लक्ष्य है।
मार्क कप्लून

1
एक विषय एक अलग उत्पाद नहीं है। यदि कोई थीम वर्डप्रेस और jquery आदि की पैकेजिंग कर रहा होता, तो थीम की आयु पूरी तरह से प्रासंगिक होती। जैसा कि कोई भी थीम नहीं करता है, अगर थीम का उपयोग किए जा रहे वर्डप्रेस के संस्करण के खिलाफ परीक्षण नहीं किया गया था, तो यह स्पष्ट नहीं है कि किस तरह के कीड़े की खोज की जाएगी। यह स्थिर बनाम गतिशील लिंकिंग दुविधा का सिर्फ एक और अभिव्यक्ति है। एक स्टेटिक लिंकिंग की दुनिया में आपका दावा ज्यादातर सही है, लेकिन वर्डप्रेस डायनेमिक लिंकिंग है और सिर्फ इसलिए कि कुछ ने 3.5 के साथ काम किया था, इसका मतलब यह नहीं है कि यह 4.5 के साथ भी काम करेगा, बैककंपिटेबल होने की कोशिश के साथ भी
मार्क

7

बस थोड़ा सा परीक्षण यहाँ।

मैंने jquery-migrate.js में झाँका और इस भाग को देखा:

// Set to true to prevent console output; migrateWarnings still maintained
// 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: लॉगिंग सक्रिय, संस्करण 1.4.0 के साथ माइग्रेट स्थापित किया गया है

सेवा:

JQMIGRATE: माइग्रेट स्थापित है, संस्करण 1.4.0

इसलिए यह वास्तव में इस भाग की तरह सभी कंसोल आउटपुट को नहीं रोकता है jquery-migrate.js:

// Show a message on the console so devs know we're active
if ( window.console && window.console.log ) {
    window.console.log( "JQMIGRATE: Migrate is installed" +
        ( jQuery.migrateMute ? "" : " with logging active" ) +
        ", version " + jQuery.migrateVersion );
}

1
तो निचला कोड सिर्फ संदेश को हटाता है, है ना? मेरा मतलब है, माइग्रेट रहता है लेकिन संदेश सुपरिचित है, है ना? यह निश्चित रूप से माइग्रेट को हटाने से बेहतर है
dingo_d

1
नहीं, यह कंसोल लॉग संदेश का उत्पादन करने वाले कोड की एक प्रति है जो आउटपुट करता है। यह पता चलता है कि migrateMute केवल सांत्वना संदेश की दूसरी छमाही के लिए परीक्षण किया जाता है - पहली छमाही उत्पादन परवाह किए बिना ... है को दूर करने के लिए इस कोड ब्लॉक सांत्वना संदेश निकाल देंगे, लेकिन आप फिर से करना है कि प्रत्येक WP अद्यतन की आवश्यकता होगी।
मजिक

2
अनुसंधान और विवरण के लिए धन्यवाद! IMO सबसे अच्छा विकल्प है, क्योंकि JQmigrate को हटाना हमेशा एक अच्छा विचार नहीं होता है, क्योंकि कई WP प्लगइन्स अपग्रेड किए गए JQuery फ़ंक्शन पर निर्भर करते हैं। यह समाधान कंसोल आउटपुट को थोड़ा साफ करने में मदद करता है!
फिलिप

1

उपाय:

इसे फंक्शन्स में जोड़ें।

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बल्क में नहीं होता है (जैसे एडमिन-डैशबोर्ड में)।


1

एक ही समस्या थी, और पता चला कि आपको बस अपने में सेट SCRIPT_DEBUGकरने की आवश्यकता है । आशा है कि यह किसी की मदद करता हैfalsewp-config.php


2
वह मेरे काम नहीं आया।
सर्ज सगन

-1

जैसा कि पहले उल्लेख किया गया है कि एंडी वर्डप्रेस पीछे की संगतता सुनिश्चित करने के लिए jQuery माइग्रेट स्क्रिप्ट का उपयोग करता है और यही कारण है कि यह स्वचालित रूप से डिफ़ॉल्ट रूप से लोड होता है।

यहां JQuery माइग्रेट मॉड्यूल को हटाने का एक सुरक्षित तरीका है और इस प्रकार क्लाइंट पक्ष पर अपने पृष्ठ के लोडिंग को तेज करते हुए कष्टप्रद JQMIGRATE नोटिस से छुटकारा पाएं। बस इस कोड को अपने कार्यों में कॉपी / पेस्ट करें। फाइल को पूरा करें और आपका काम हो जाए:

<?php
/**
 * Disable jQuery Migrate in WordPress.
 *
 * @author Guy Dumais.
 * @link https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/
 */
add_filter( 'wp_default_scripts', $af = static function( &$scripts) {
    if(!is_admin()) {
        $scripts->remove( 'jquery');
        $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
    }    
}, PHP_INT_MAX );
unset( $af );


अधिक जानकारी

कारण मैं एक स्थिर समारोह का उपयोग कर रहा बारे में अधिक जानकारी प्राप्त करने के लिए, मेरे लेख यहाँ पढ़ें:
►► https://en.guydumais.digital/disable-jquery-migrate-in-wordpress/


2
नीचा दिखाया क्योंकि 1. यह एक स्पैम की बहुत अधिक बदबू आ रही है और सिर्फ एक उत्तर की तरह महसूस करने के लिए न्यूनतम प्रयास करता है। 2. आप हार्ड कोड को कैश बस्ट करने वाले संस्करण को कोड करते हैं।
मार्क कप्लून

इसकी शर्म की बात है क्योंकि इसका अच्छा तरीका, यहां तक ​​कि add_filterजब आप इसका उपयोग कर रहे हों तो वास्तव में यह एक क्रिया है।
pcarvalho
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.