Hoe jQuery Cookie en de core/js-cookie-bibliotheek in Drupal te herschrijven met de js_cookie‑module
Waarom deze wijziging?
- In Drupal 9 werd jQuery Cookie uit de core verwijderd en vervangen door de js-cookie-bibliotheek. Tijdens Drupal 9 bestond er een BC‑shim (
core/jquery.cookie), maar deze werd verwijderd voor Drupal 10.
https://www.drupal.org/node/3104677 - In Drupal 10.1 werd de
core/js-cookie-assetbibliotheek zelf als verouderd aangemerkt en gepland voor verwijdering in Drupal 11, omdat de core deze niet langer gebruikte. De changerecord raadt aan om over te stappen op de bijgedragen module JS Cookie.
https://www.drupal.org/node/3322720
https://www.drupal.org/project/drupal/issues/3296086 - De bijgedragen module JS Cookie (
drupal/js_cookie) biedt een definitie van een assetbibliotheek voor js-cookie, zodat modules en thema’s cookies kunnen blijven gebruiken in Drupal 10 en 11. https://www.drupal.org/project/js_cookie
Overzicht van het migratiepad
1) Drupal 8 → 9: jQuery Cookie → core/js-cookie
Historische context: Drupal 9 verving jQuery Cookie door js-cookie en gaf voorbeelden van code‑ en bibliotheekmapping. https://www.drupal.org/node/3104677
# VOOR (Drupal 8 / vroege 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/jquery
- core/jquery.cookie
- core/drupal
// VOOR (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);
Na (Drupal 9) was je afhankelijk van core/js-cookie en gebruikte je de Cookies.*-API: https://www.drupal.org/node/3104677
# NA (Drupal 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- core/js-cookie
// NA (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+ en 11: core/js-cookie → bijgedragen js_cookie
Omdat Drupal core core/js-cookie in 10.1 heeft afgeschreven en in 11 heeft verwijderd, moet je deze vervangen door de bibliotheek van de bijgedragen module JS Cookie: js_cookie/js-cookie. https://www.drupal.org/node/3322720
Composer
composer require drupal/js_cookie
Dit installeert de module die een Drupal‑assetbibliotheek aanbiedt voor het upstream‑pakket js-cookie. https://www.drupal.org/project/js_cookie
Een module‑ of thema‑afhankelijkheid definiëren (voor contrib/custom projecten)
# my_module.info.yml (of het .info.yml-bestand van je thema)
name: My Module
type: module
core_version_requirement: ^10 || ^11
dependencies:
- js_cookie:js_cookie
De projectpagina vermeldt expliciet dat contrib‑modules js_cookie:js_cookie als afhankelijkheid moeten toevoegen (en drupal/js_cookie moeten vereisen via composer als je module een eigen composer.json bevat). https://www.drupal.org/project/js_cookie
Wijzig de assetbibliotheek‑afhankelijkheid
# Vervang dit (verouderd in 10.1, verwijderd in 11)
# - core/js-cookie
# Door dit (geleverd door de contrib‑module)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- js_cookie/js-cookie
Deze exacte vervanging wordt aanbevolen in de changerecord die de afschrijving aankondigde. https://www.drupal.org/node/3322720
JavaScript‑code
Je JS‑code hoeft niet gewijzigd te worden als je al de Cookies-API van js-cookie gebruikte—alleen de bibliotheekafhankelijkheid verandert. https://www.drupal.org/node/3322720
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
// Een cookie instellen.
Cookies.set('cutest', 'red panda', { path: '/', sameSite: 'Lax' });
// Een cookie ophalen.
const myCookieValue = Cookies.get('cutest');
// Een cookie verwijderen.
Cookies.remove('cutest', { path: '/' });
// JSON veilig opslaan/ophalen.
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutestRaw = Cookies.get('cutest');
const cutest = cutestRaw ? JSON.parse(cutestRaw) : null;
},
};
})(Drupal, window.Cookies);
Tip: js-cookie is RFC 6265‑compatibel en codeert waarden anders dan de oude jQuery Cookie‑plugin, vooral voor JSON. De changerecord van Drupal 9 beschrijft deze gedragsverschillen. https://www.drupal.org/node/3104677
Voorbeelden uit het ecosysteem
- De EU Cookie Compliance‑module volgde de afschrijving van
core/js-cookieen er werden patches voorgesteld om over te stappen opjs_cookie/js-cookie. https://www.drupal.org/project/eu_cookie_compliance/issues/3380490 - Diverse contrib‑projecten dienden issues in om jQuery Cookie te vervangen door js-cookie en later om de afschrijving van
core/js-cookieaan te pakken. https://www.drupal.org/project/quicktabs/issues/3298649
https://www.drupal.org/project/fpa/issues/3505122
Stapsgewijze upgrade‑instructies
A) Van jQuery Cookie direct naar js_cookie/js-cookie (Drupal 10+)
- Verwijder
core/jqueryencore/jquery.cookieuit de afhankelijkheden in.libraries.yml. https://www.drupal.org/node/3104677 - Voeg
js_cookie:js_cookietoe aan.info.ymlals afhankelijkheid (voor contrib/custom). https://www.drupal.org/project/js_cookie - Wijzig je bibliotheekafhankelijkheid naar
js_cookie/js-cookie. https://www.drupal.org/project/js_cookie - Herschrijf JS van
$.cookienaarCookies.*zoals hierboven getoond. https://www.drupal.org/node/3104677
B) Van core/js-cookie naar js_cookie/js-cookie (Drupal 10.1 → 11)
- Installeer de module:
composer require drupal/js_cookie. https://www.drupal.org/project/js_cookie - (Contrib) Voeg
js_cookie:js_cookietoe aan.info.yml; op sites hoeft de module alleen geactiveerd te worden. https://www.drupal.org/project/js_cookie - Vervang in
.libraries.ymlcore/js-cookiedoorjs_cookie/js-cookie. https://www.drupal.org/node/3322720 - Behoud je bestaande JS‑code met
Cookies.*. Functioneel verandert er niets. https://www.drupal.org/node/3322720
Valkuilen en best practices
- Voorbereiding op Drupal 11:
core/js-cookiewordt verwijderd in Drupal 11 — zorg ervoor dat alle afhankelijkheden naarjs_cookie/js-cookieverwijzen. https://www.drupal.org/node/3322720 - Privacy/CDN: De js_cookie‑projectpagina beschrijft hoe je kunt voorkomen dat js-cookie vanaf een CDN wordt geladen (gegevensbescherming). Gebruik bij voorkeur lokale assets. https://www.drupal.org/project/js_cookie
- Encodering & JSON: Vertrouw niet op impliciet JSON‑gedrag. Gebruik expliciet
JSON.stringifyenJSON.parse. https://www.drupal.org/node/3104677 - Praktijkvoorbeelden: Bekijk issue‑queues (zoals EU Cookie Compliance) voor voorbeelden en patronen bij updates. https://www.drupal.org/project/eu_cookie_compliance/issues/3380490