Kako prepisati jQuery Cookie i biblioteku core/js-cookie u Drupalu koristeći modul js_cookie
Zašto ova promena?
- U Drupal 9 jQuery Cookie je uklonjen iz core-a i zamenjen bibliotekom js-cookie. BC shim (
core/jquery.cookie) postojao je tokom Drupal 9, ali je uklonjen za Drupal 10.
https://www.drupal.org/node/3104677 - U Drupal 10.1 sama
core/js-cookieasset biblioteka je označena kao zastarela i planirana za uklanjanje u Drupal 11 jer je core više nije koristio. Change record preporučuje prelazak na contrib modul JS Cookie.
https://www.drupal.org/node/3322720
https://www.drupal.org/project/drupal/issues/3296086 - Contrib modul JS Cookie (
drupal/js_cookie) obezbeđuje definiciju asset biblioteke za js-cookie, tako da moduli/teme mogu nastaviti da koriste Cookies u Drupal 10 i 11. https://www.drupal.org/project/js_cookie
Pregled putanje migracije
1) Drupal 8 → 9: jQuery Cookie → core/js-cookie
Istorijski kontekst: Drupal 9 je zamenio jQuery Cookie sa js-cookie i obezbedio primere mapiranja koda i biblioteka. https://www.drupal.org/node/3104677
# PRE (Drupal 8 / rani 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/jquery
- core/jquery.cookie
- core/drupal
// PRE (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);
Posle (Drupal 9) zavisili ste od core/js-cookie i koristili Cookies.* API: https://www.drupal.org/node/3104677
# POSLE (Drupal 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- core/js-cookie
// POSLE (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+ i 11: core/js-cookie → contrib js_cookie
Pošto je Drupal core označio core/js-cookie kao zastarelu u verziji 10.1 i uklonio je u verziji 11, morate je zameniti bibliotekom iz contrib modula JS Cookie: js_cookie/js-cookie. https://www.drupal.org/node/3322720
Composer
composer require drupal/js_cookie
Ovo instalira modul koji izlaže Drupal asset biblioteku za upstream paket js-cookie. https://www.drupal.org/project/js_cookie
Prijavljivanje zavisnosti modula/teme (za contrib/custom projekte)
# my_module.info.yml (ili .info.yml vaše teme)
name: My Module
type: module
core_version_requirement: ^10 || ^11
dependencies:
- js_cookie:js_cookie
Na stranici projekta eksplicitno je navedeno da se js_cookie:js_cookie doda kao zavisnost za contrib module (i da se zahteva drupal/js_cookie u composer-u ako modul ima sopstveni composer.json). [4]
Prebacivanje zavisnosti asset biblioteke
# Zamenite ovo (zastarelo u 10.1, uklonjeno u 11)
# - core/js-cookie
# Ovime (obezbeđuje contrib modul)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- js_cookie/js-cookie
Ova tačna zamena je preporučeni put u core change record-u. [2]
JavaScript kod
Vaš JS kod ne treba da se menja ako ste već koristili Cookies API iz js-cookie — menja se samo zavisnost biblioteke. [2]
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
// Postavi cookie.
Cookies.set('cutest', 'red panda', { path: '/', sameSite: 'Lax' });
// Uzmi cookie.
const myCookieValue = Cookies.get('cutest');
// Ukloni cookie.
Cookies.remove('cutest', { path: '/' });
// Sigurno čuvanje/učitavanje JSON-a.
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutestRaw = Cookies.get('cutest');
const cutest = cutestRaw ? JSON.parse(cutestRaw) : null;
},
};
})(Drupal, window.Cookies);
Savet: js-cookie je u skladu sa RFC 6265 i enkodira vrednosti drugačije nego stari jQuery Cookie, posebno kada je JSON u pitanju. Change record za Drupal 9 opisuje ove razlike. https://www.drupal.org/node/3104677
Primeri iz ekosistema
- EU Cookie Compliance modul pratio je deprecaciju
core/js-cookiei predloženi su patch-evi za prelazak najs_cookie/js-cookie. https://www.drupal.org/project/eu_cookie_compliance/issues/3380490 - Razni contrib projekti su otvarali issue-e radi zamene jQuery Cookie biblioteke sa js-cookie, a kasnije i radi rešavanja deprecacije
core/js-cookie. https://www.drupal.org/project/quicktabs/issues/3298649
https://www.drupal.org/project/fpa/issues/3505122
Uputstva za nadogradnju korak po korak
A) Sa jQuery Cookie direktno na js_cookie/js-cookie (Drupal 10+)
- Uklonite
core/jqueryicore/jquery.cookiezavisnosti iz vašeg.libraries.ymlfajla. https://www.drupal.org/node/3104677 - Dodajte
js_cookie:js_cookieu zavisnosti vašeg.info.yml(za contrib/custom module i teme). https://www.drupal.org/project/js_cookie - Promenite zavisnost biblioteke na
js_cookie/js-cookie. https://www.drupal.org/project/js_cookie - Prepišite JS kod sa
$.cookienaCookies.*kao što je prikazano gore. https://www.drupal.org/node/3104677
B) Sa core/js-cookie na js_cookie/js-cookie (Drupal 10.1 → 11)
- Instalirajte modul:
composer require drupal/js_cookie. https://www.drupal.org/project/js_cookie - (Contrib) Dodajte
js_cookie:js_cookieu.info.yml; samo omogućite modul. https://www.drupal.org/project/js_cookie - U
.libraries.ymlzamenitecore/js-cookiesajs_cookie/js-cookie. https://www.drupal.org/node/3322720 - Zadržite postojeći
Cookies.*JS kod. Nisu potrebne funkcionalne izmene. https://www.drupal.org/node/3322720
Potencijalne poteškoće i dobre prakse
- Spremnost za Drupal 11:
core/js-cookieje uklonjen u Drupal 11 — obavezno ažurirajte sve zavisnosti da koristejs_cookie/js-cookie. https://www.drupal.org/node/3322720 - Privatnost/CDN: Stranica projekta js_cookie dokumentuje kako izbeći učitavanje js-cookie biblioteke sa CDN‑a (zbog zaštite podataka). Preporučuje se korišćenje lokalnih asset-a. https://www.drupal.org/project/js_cookie
- Enkodiranje & JSON: Ne oslanjajte se na implicitno JSON ponašanje. Koristite eksplicitno
JSON.stringifyiJSON.parsekao u primerima. https://www.drupal.org/node/3104677 - Realni patch-evi: Proverite issue queue (npr. EU Cookie Compliance) da vidite primere stvarnih rešenja. https://www.drupal.org/project/eu_cookie_compliance/issues/3380490