Drupal में jQuery Cookie और core/js-cookie लाइब्रेरी को js_cookie मॉड्यूल के साथ कैसे पुनर्लेखित करें
यह परिवर्तन क्यों?
- Drupal 9 में, jQuery Cookie को कोर से हटाकर js-cookie लाइब्रेरी से बदल दिया गया। Drupal 9 के दौरान एक BC shim (
core/jquery.cookie) मौजूद था, लेकिन Drupal 10 में इसे हटा दिया गया।
https://www.drupal.org/node/3104677 - Drupal 10.1 में,
core/js-cookieएसेट लाइब्रेरी को स्वयं ही डिप्रिकेट कर दिया गया और Drupal 11 में हटाने के लिए अनुसूचित किया गया, क्योंकि कोर अब इसे उपयोग नहीं करता था। परिवर्तन रिकॉर्ड में योगदान किए गए JS Cookie मॉड्यूल पर स्विच करने की अनुशंसा की गई है।
https://www.drupal.org/node/3322720
https://www.drupal.org/project/drupal/issues/3296086 - योगदान किया गया JS Cookie मॉड्यूल (
drupal/js_cookie) js-cookie के लिए एक एसेट लाइब्रेरी परिभाषा प्रदान करता है ताकि मॉड्यूल/थीम Drupal 10 और 11 में कुकीज़ का उपयोग जारी रख सकें। https://www.drupal.org/project/js_cookie
माइग्रेशन पथ का अवलोकन
1) Drupal 8 → 9: jQuery Cookie → core/js-cookie
ऐतिहासिक संदर्भ: Drupal 9 ने jQuery Cookie को js-cookie से बदल दिया और कोड तथा लाइब्रेरी मैपिंग के उदाहरण प्रदान किए। https://www.drupal.org/node/3104677
# पहले (Drupal 8 / शुरुआती 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/jquery
- core/jquery.cookie
- core/drupal
// पहले (jQuery Cookie API)
(($, Drupal) => {
Drupal.behaviors.myModule = {
attach: () => {
$.cookie('cutest', 'red panda');
const myCookieValue = $.cookie('cutest');
$.removeCookie('cutest');
$.cookie.json = true;
$.cookie('cutest', { animal: 'red panda' });
},
};
})(jQuery, Drupal);
बाद में (Drupal 9) आपको core/js-cookie पर निर्भर रहना पड़ता था और आप Cookies.* API का उपयोग करते थे: https://www.drupal.org/node/3104677
# बाद में (Drupal 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- core/js-cookie
// बाद में (Drupal 9, js-cookie API)
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
Cookies.set('cutest', 'red panda');
const myCookieValue = Cookies.get('cutest');
Cookies.remove('cutest');
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutest = JSON.parse(Cookies.get('cutest') || 'null');
},
};
})(Drupal, window.Cookies);
2) Drupal 10.1+ और 11: core/js-cookie → योगदान किया गया js_cookie
क्योंकि Drupal कोर ने 10.1 में core/js-cookie को डिप्रिकेट कर दिया और 11 में पूरी तरह हटा दिया, इसलिए आपको इसे योगदान किए गए JS Cookie मॉड्यूल की लाइब्रेरी js_cookie/js-cookie से बदलना होगा। https://www.drupal.org/node/3322720
Composer
composer require drupal/js_cookie
यह मॉड्यूल स्थापित करता है जो अपस्ट्रीम js-cookie पैकेज के लिए एक Drupal एसेट लाइब्रेरी प्रदान करता है। https://www.drupal.org/project/js_cookie
मॉड्यूल/थीम निर्भरता घोषित करें (contrib/custom के लिए)
# my_module.info.yml (या आपके थीम का .info.yml)
name: My Module
type: module
core_version_requirement: ^10 || ^11
dependencies:
- js_cookie:js_cookie
प्रोजेक्ट पेज स्पष्ट रूप से बताता है कि contrib मॉड्यूल्स को js_cookie:js_cookie को निर्भरता के रूप में जोड़ना चाहिए (और यदि आपके मॉड्यूल में composer.json है तो drupal/js_cookie को composer में require करना चाहिए)। https://www.drupal.org/project/js_cookie
अपनी एसेट लाइब्रेरी निर्भरता बदलें
# इसे बदलें (10.1 में डिप्रिकेटेड, 11 में हटाया गया)
# - core/js-cookie
# इसके साथ (contrib मॉड्यूल द्वारा प्रदान किया गया)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- js_cookie/js-cookie
यह प्रतिस्थापन वही है जो डिप्रिकेशन को घोषित करने वाली core change रिकॉर्ड में सुझाया गया है। https://www.drupal.org/node/3322720
JavaScript कोड
यदि आप पहले से js-cookie की Cookies API का उपयोग कर रहे थे, तो आपके JS कोड में कोई बदलाव आवश्यक नहीं—केवल लाइब्रेरी निर्भरता बदलती है। https://www.drupal.org/node/3322720
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
// एक कुकी सेट करें।
Cookies.set('cutest', 'red panda', { path: '/', sameSite: 'Lax' });
// एक कुकी प्राप्त करें।
const myCookieValue = Cookies.get('cutest');
// कुकी हटाएँ।
Cookies.remove('cutest', { path: '/' });
// JSON सुरक्षित रूप से स्टोर/रीड करें।
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutestRaw = Cookies.get('cutest');
const cutest = cutestRaw ? JSON.parse(cutestRaw) : null;
},
};
})(Drupal, window.Cookies);
टिप: js-cookie RFC 6265–अनुपालन है और पुराने jQuery Cookie की तुलना में मानों को अलग ढंग से एनकोड करता है, खासकर JSON के लिए। Drupal 9 का परिवर्तन रिकॉर्ड इन व्यवहारिक अंतर को बताता है। https://www.drupal.org/node/3104677
इकोसिस्टम से उदाहरण
- EU Cookie Compliance मॉड्यूल ने
core/js-cookieके डिप्रिकेशन को ट्रैक किया औरjs_cookie/js-cookieपर स्विच करने के लिए पैच प्रस्तावित किए। https://www.drupal.org/project/eu_cookie_compliance/issues/3380490 - विभिन्न contrib प्रोजेक्ट्स ने jQuery Cookie को js-cookie से बदलने और बाद में
core/js-cookieके डिप्रिकेशन को संभालने के लिए issues दर्ज किए। https://www.drupal.org/project/quicktabs/issues/3298649
https://www.drupal.org/project/fpa/issues/3505122
स्टेप‑बाय‑स्टेप अपग्रेड रेसिपीज़
A) jQuery Cookie से सीधे js_cookie/js-cookie पर जाएँ (Drupal 10+)
.libraries.ymlसेcore/jqueryऔरcore/jquery.cookieनिर्भरताएँ हटाएँ। https://www.drupal.org/node/3104677- contrib/custom मॉड्यूल और थीम के लिए
.info.ymlमेंjs_cookie:js_cookieजोड़ें। https://www.drupal.org/project/js_cookie - अपनी लाइब्रेरी निर्भरता को
js_cookie/js-cookieमें बदलें। https://www.drupal.org/project/js_cookie $.cookieसेCookies.*में अपने JS को फिर से लिखें, जैसा ऊपर दिखाया गया है। https://www.drupal.org/node/3104677
B) core/js-cookie से js_cookie/js-cookie पर जाएँ (Drupal 10.1 → 11)
- मॉड्यूल स्थापित करें:
composer require drupal/js_cookie. https://www.drupal.org/project/js_cookie - (Contrib)
.info.ymlमेंjs_cookie:js_cookieजोड़ें; साइटों पर केवल मॉड्यूल सक्षम करना होगा। https://www.drupal.org/project/js_cookie .libraries.ymlमेंcore/js-cookieकोjs_cookie/js-cookieसे बदलें। https://www.drupal.org/node/3322720- अपने मौजूदा
Cookies.*JS कोड को वैसा ही रखें — किसी बदलाव की आवश्यकता नहीं। https://www.drupal.org/node/3322720
ध्यान देने योग्य बातें और सर्वोत्तम प्रथाएँ
- Drupal 11 तैयारी:
core/js-cookieDrupal 11 में हटा दिया गया है — सुनिश्चित करें कि सभी निर्भरताएँjs_cookie/js-cookieकी ओर संकेत कर रही हों। https://www.drupal.org/node/3322720 - गोपनीयता/CDN: js_cookie प्रोजेक्ट पेज बताता है कि js-cookie को CDN से लोड होने से कैसे रोका जाए (डेटा सुरक्षा कारणों से)। स्थानीय एसेट्स को प्राथमिकता दें। https://www.drupal.org/project/js_cookie
- एन्कोडिंग और JSON: निहित JSON व्यवहार पर निर्भर न रहें।
JSON.stringifyऔरJSON.parseका स्पष्ट उपयोग करें। https://www.drupal.org/node/3104677 - वास्तविक दुनिया के पैच: अपडेट करते समय पैटर्न देखने के लिए issue queues की समीक्षा करें (उदा. EU Cookie Compliance)। https://www.drupal.org/project/eu_cookie_compliance/issues/3380490