Wie man jQuery Cookie und die core/js-cookie‑Bibliothek in Drupal mit dem js_cookie‑Modul umschreibt
Warum diese Änderung?
- In Drupal 9 wurde jQuery Cookie aus dem Core entfernt und durch die js-cookie-Bibliothek ersetzt. Ein BC‑Shim (
core/jquery.cookie) existierte während Drupal 9, wurde jedoch für Drupal 10 entfernt.
https://www.drupal.org/node/3104677 - In Drupal 10.1 wurde die Asset‑Bibliothek
core/js-cookieselbst als veraltet markiert und für die Entfernung in Drupal 11 vorgesehen, da der Core sie nicht mehr verwendete. Der Change‑Record empfiehlt den Umstieg auf das beitragsbasierte JS Cookie-Modul.
https://www.drupal.org/node/3322720
https://www.drupal.org/project/drupal/issues/3296086 - Das beitragsbasierte JS Cookie-Modul (
drupal/js_cookie) stellt eine Asset‑Bibliothek für js-cookie bereit, sodass Module/Themes Cookies weiterhin in Drupal 10 und 11 verwenden können. https://www.drupal.org/project/js_cookie
Übersicht des Migrationspfads
1) Drupal 8 → 9: jQuery Cookie → core/js-cookie
Historischer Kontext: Drupal 9 ersetzte jQuery Cookie durch js-cookie und stellte Beispiele für Code‑ und Bibliothekszuordnungen bereit.
https://www.drupal.org/node/3104677
# VORHER (Drupal 8 / frühes 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/jquery
- core/jquery.cookie
- core/drupal
// VORHER (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);
Nachher (Drupal 9) war die Abhängigkeit core/js-cookie erforderlich, und man nutzte die API Cookies.*:
https://www.drupal.org/node/3104677
# NACHHER (Drupal 9)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- core/js-cookie
// NACHHER (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+ und 11: core/js-cookie → beitragsbasiertes js_cookie
Da der Drupal‑Core core/js-cookie in 10.1 als veraltet markierte und in 11 entfernte, muss die Bibliothek durch die des JS Cookie-Moduls ersetzt werden: js_cookie/js-cookie.
https://www.drupal.org/node/3322720
Composer
composer require drupal/js_cookie
Dies installiert das Modul, das eine Drupal‑Asset‑Bibliothek für das ursprüngliche js-cookie-Paket bereitstellt.
https://www.drupal.org/project/js_cookie
Modul-/Theme-Abhängigkeit deklarieren (für Contrib/Custom‑Projekte)
# my_module.info.yml (oder die .info.yml Ihres Themes)
name: My Module
type: module
core_version_requirement: ^10 || ^11
dependencies:
- js_cookie:js_cookie
Die Projektseite weist ausdrücklich darauf hin, js_cookie:js_cookie als Abhängigkeit für Contrib‑Module hinzuzufügen (sowie drupal/js_cookie in composer zu verlangen, wenn das Modul eine eigene composer.json hat). [4]
Bibliotheksabhängigkeit umstellen
# Ersetzen Sie dies (veraltet in 10.1, entfernt in 11)
# - core/js-cookie
# Durch dies (vom Contrib‑Modul bereitgestellt)
my_library:
js:
js/my_library.js: {}
dependencies:
- core/drupal
- js_cookie/js-cookie
Genau dieser Austausch wird im Core‑Change‑Record zur Abkündigung empfohlen. [2]
JavaScript‑Code
Ihr JS‑Code benötigt keine Änderungen, wenn Sie bereits die Cookies-API aus js-cookie verwendet haben — nur die Bibliotheksabhängigkeit ändert sich. [2]
((Drupal, Cookies) => {
Drupal.behaviors.myModule = {
attach: () => {
// Ein Cookie setzen.
Cookies.set('cutest', 'red panda', { path: '/', sameSite: 'Lax' });
// Ein Cookie auslesen.
const myCookieValue = Cookies.get('cutest');
// Ein Cookie entfernen.
Cookies.remove('cutest', { path: '/' });
// JSON sicher speichern/auslesen.
Cookies.set('cutest', JSON.stringify({ animal: 'red panda' }));
const cutestRaw = Cookies.get('cutest');
const cutest = cutestRaw ? JSON.parse(cutestRaw) : null;
},
};
})(Drupal, window.Cookies);
Tipp: js-cookie entspricht RFC 6265 und codiert Werte anders als das alte jQuery Cookie, insbesondere bei JSON. Der Change‑Record zu Drupal 9 beschreibt diese Unterschiede.
https://www.drupal.org/node/3104677
Beispiele aus dem Ökosystem
- Das Modul EU Cookie Compliance verfolgte die Abkündigung von
core/js-cookieund es wurden Patches vorgeschlagen, um aufjs_cookie/js-cookieumzusteigen.
https://www.drupal.org/project/eu_cookie_compliance/issues/3380490 - Verschiedene Contrib‑Projekte haben Issues eingereicht, um jQuery Cookie durch js-cookie zu ersetzen und später die Abkündigung von
core/js-cookiezu adressieren.
https://www.drupal.org/project/quicktabs/issues/3298649
https://www.drupal.org/project/fpa/issues/3505122
Schritt‑für‑Schritt‑Upgrade‑Anleitungen
A) Von jQuery Cookie direkt zu js_cookie/js-cookie (Drupal 10+)
- Entfernen Sie die Abhängigkeiten
core/jqueryundcore/jquery.cookieaus Ihrer.libraries.yml.
https://www.drupal.org/node/3104677 - Fügen Sie
js_cookie:js_cookiezu den Abhängigkeiten Ihrer.info.ymlhinzu (für Contrib-/Custom‑Module und Themes).
https://www.drupal.org/project/js_cookie - Stellen Sie Ihre Bibliotheksabhängigkeit auf
js_cookie/js-cookieum.
https://www.drupal.org/project/js_cookie - Schreiben Sie JS‑Code von
$.cookiezuCookies.*um, wie oben gezeigt.
https://www.drupal.org/node/3104677
B) Von core/js-cookie zu js_cookie/js-cookie (Drupal 10.1 → 11)
- Installieren Sie das Modul:
composer require drupal/js_cookie
https://www.drupal.org/project/js_cookie - (Contrib) Fügen Sie
js_cookie:js_cookiein.info.ymlhinzu; aktivieren Sie einfach das Modul.
https://www.drupal.org/project/js_cookie - Ersetzen Sie in
.libraries.ymldie Bibliothekcore/js-cookiedurchjs_cookie/js-cookie.
https://www.drupal.org/node/3322720 - Behalten Sie Ihren bestehenden
Cookies.*‑JavaScriptcode bei — funktionale Änderungen sind nicht notwendig.
https://www.drupal.org/node/3322720
Fallstricke und Best Practices
- Bereitschaft für Drupal 11:
core/js-cookiewird in Drupal 11 entfernt — stellen Sie sicher, dass alle Abhängigkeiten aufjs_cookie/js-cookiezeigen.
https://www.drupal.org/node/3322720 - Datenschutz/CDN: Die Projektseite von js_cookie beschreibt, wie man vermeidet, js-cookie aus einem CDN zu laden (Datenschutz). Lokale Assets werden bevorzugt.
https://www.drupal.org/project/js_cookie - Encoding & JSON: Verlassen Sie sich nicht auf implizites JSON‑Verhalten. Verwenden Sie explizit
JSON.stringifyundJSON.parse, wie oben gezeigt.
https://www.drupal.org/node/3104677 - Praxisnahe Patches: Prüfen Sie Issue‑Queues (z. B. EU Cookie Compliance), um Muster beim Aktualisieren zu erkennen.
https://www.drupal.org/project/eu_cookie_compliance/issues/3380490