Dawns cart-drawer.js erklärt: Die Raw-Datei, Dateistruktur und Anpassung
Der vollständige Leitfaden zu Shopifys Dawn cart-drawer.js Raw-Datei auf GitHub: Was sie tut, wie sie strukturiert ist und wie man sie sicher anpasst.
Die Datei unter raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js ist das kompilierte JavaScript-Asset, das Dawns ausklappbare Warenkorb-Schublade antreibt. Sie definiert das benutzerdefinierte Element CartDrawer, verwaltet Öffnen- und Schließanimationen, löst AJAX-Warenkorbaktualisierungen aus und hält den Zustand der Schublade mit dem Rest der Seite synchron. Falls du nach dieser Raw-URL gesucht hast, versuchst du mit großer Sicherheit, die Quelle zu lesen, sie zu erweitern oder eine Anpassung zu debuggen, die etwas kaputtgemacht hat.
Wichtigste Erkenntnisse
cart-drawer.jsbefindet sich in Dawnsassets/-Ordner und wird übertheme.liquidals aufgeschobenes Skript geladen.- Die
CartDrawer-Klasse ist eine Web Component (benutzerdefiniertes Element), dieDrawererweitert und die Methodenopen()undclose()bereitstellt. - Die Schublade wird neu gerendert, indem Shopifys Section Rendering API aufgerufen wird, nicht durch direkte DOM-Manipulation.
- Dawns
main-Branch auf GitHub kann Code für noch nicht veröffentlichte Funktionen enthalten. Die stabile Version für Händler ist das, was du im Shopify Theme Store findest. - Das direkte Bearbeiten von
cart-drawer.jssetzt dich auf einen Pfad manueller Updates. Bevorzuge App Blocks oder separate Asset-Dateien, wenn möglich.
Warum Entwickler diese Raw-Datei nachschlagen
Dawn ist Shopifys Flaggschiff-Referenztheme. Stand März 2026 läuft es auf über 268.000 aktiven Shopify-Stores, wodurch es das am weitesten verbreitete Theme auf der Plattform ist. Da der vollständige Quellcode öffentlich auf GitHub verfügbar ist, laden Entwickler regelmäßig die Raw-URL herunter, um:
- Die
CartDrawer-Klasse zu lesen, ohne durch Githubs Benutzeroberfläche zu navigieren - ihre lokale Kopie mit dem Upstream-
main-Branch zu vergleichen, um Breaking Changes nach einem Theme-Update zu erkennen - spezifische Methoden (wie
renderContents()odergetSectionsToRender()) in ein Begleitskript zu kopieren - das Pub/Sub-Event-System zu verstehen, bevor eine Drittanbieter-Integration geschrieben wird
Die Datei ist quelloffen verfügbar, aber nicht unter einer freizügigen Lizenz quelloffen, daher überprüfe immer Shopifys Lizenzbedingungen, bevor du einen Teil davon weitergibst.
Wie die Datei strukturiert ist
Dawn folgt einer "HTML-first, JavaScript-only-as-needed"-Philosophie, die prägt, wie cart-drawer.js geschrieben ist. Das findest du in der Datei:
Drawer-Basisklasse - Eine generische Web Component, dieopen(),close(), Focus Trapping und dasaria-expanded-Attribut verwaltet. Sowohl die Warenkorb-Schublade als auch das Mobile-Menu-Drawer erben davon.CartDrawer-Klasse - ErweitertDrawer. Beiopen()ruft sierenderContents()auf, um ein frisches Rendering descart-drawer-Abschnitts über Shopifys Section Rendering API zu holen, und tauscht dann das innere HTML aus. Das ist der Grund, warum die Schublade immer den aktuellen Zustand des Warenkorbs widerspiegelt, ohne die Seite neu zu laden.CartDrawerItems-Klasse - ErweitertCartItems(definiert incart.js). Sie verwaltet Mengenänderungen, Entfernung von Zeilenelementen und Fehleranzeige und spiegelt das Verhalten des vollständigen Warenkorbs wider, beschränkt auf die DOM-IDs der Schublade (mit PräfixCartDrawer-).- Event Listener - Die Datei lauscht auf das
cart-updatePub/Sub-Event, damit andere Komponenten (Quick-Add, Product Forms) einen Schublade-Refresh auslösen können, ohne direkt an dieCartDrawer-Instanz gekoppelt zu sein.
Die getSectionsToRender()-Methode gibt ein Array von Abschnittsbeschreibungen zurück, die jeweils eine Abschnitts-ID einem Selektor im HTML der Schublade zuordnen. Wenn die AJAX-Antwort ankommt, durchläuft Dawn dieses Array und patcht nur die relevanten DOM-Knoten, um die Neurendering präzise zu halten.
Wie man die Raw-Datei auf GitHub liest
Der kanonische Ort ist:
https://github.com/Shopify/dawn/blob/main/assets/cart-drawer.js
Um die Klartext-Version zu erhalten, die sich für curl, fetch oder einen Code-Editor eignet:
https://raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js
Um an eine bestimmte Version statt des laufenden main-Branch festzulegen, ersetze main durch ein Tag, zum Beispiel v15.4.1 (die stabile Version von Dezember 2025). Das gibt dir eine stabile URL, die sich nicht ändert, wenn Shopify neuen Code ausliefert:
https://raw.githubusercontent.com/Shopify/dawn/v15.4.1/assets/cart-drawer.js
Hinweis: Shopify gibt ausdrücklich an, dass der main-Branch Code für Funktionen enthalten kann, die noch nicht für Händler freigegeben sind. Wenn du gegen deinen Live-Store vergleichst, vergleiche immer gegen das Tag-Release, das deiner installierten Version entspricht, nicht gegen main.
Wie man die Warenkorb-Schublade anpasst, ohne die Datei zu überschreiben
Das direkte Bearbeiten von cart-drawer.js ist der schnellste Weg und langfristig der schmerzhafteste. Jedes Dawn-Theme-Update liefert eine neue Version dieser Datei, und eine manuelle Bearbeitung bedeutet, dass du deine Änderungen von Hand neu anwenden musst oder sie verlierst.
Hier sind sicherere Muster, in bevorzugter Reihenfolge:
- Subclass in einer separaten Asset-Datei. Erstelle
assets/cart-drawer-custom.js, importiere sie nachcart-drawer.jsintheme.liquidund erweitere dieCartDrawer-Klasse, anstatt sie zu ändern. Dein Code überlebt Theme-Updates. - Nutze das Pub/Sub-Event-System. Dawn stellt ein
subscribe(PUB_SUB_EVENTS.cartUpdate, callback)-Utility zur Verfügung. Jedes Skript kann auf Warenkorbänderungen lauschen und reagieren, ohne die internen Methoden der Schublade zu berühren. - Nutze einen App Block. Wenn du eine Shopify-App oder eine wiederverwendbare Anpassung erstellst, ermöglicht dir ein App Block, HTML und Skript in die Fußzeile der Schublade einzufügen, ohne überhaupt Theme-Dateien zu bearbeiten.
- No-Code-Option für Warenkorb-Typ. Gehe im Shopify Admin zu Online Store > Themes > Customize > Theme Settings > Cart. Du kannst den Warenkorb-Typ zwischen Drawer, Page und Notification wechseln, ohne eine Zeile Code zu schreiben.
Wenn du cart-drawer.js direkt bearbeiten musst (zum Beispiel, um zu ändern, welche Abschnitte in getSectionsToRender() abgerufen werden), versioniere dein Theme auf GitHub und richte einen Diff-Workflow ein, damit du bei jedem Dawn-Release sehen kannst, was sich geändert hat.
Häufige Anpassungen und bekannte Fallstricke
Die Schublade programmgesteuert öffnen. Die Web Component CartDrawer stellt eine unkomplizierte CartDrawer.open()-Methode zur Verfügung, die viele Entwickler schnell finden. Der schwierigere Teil ist die Aktualisierung des Inhalts der Schublade nach einem externen Hinzufügen zum Warenkorb. Das empfohlene Muster besteht darin, nach deinem AJAX-Aufruf an /cart/add.js ein cart-update Pub/Sub-Event zu versenden, anstatt interne Render-Methoden direkt aufzurufen, da diese internen APIs zwischen Dawn-Versionen ändern.
DOM-ID-Namenskonventionen. Dawn präfixiert Schublade-spezifische Element-IDs mit CartDrawer- (zum Beispiel CartDrawer-LineItemStatus, CartDrawer-CartErrors). Wenn du eine Anpassung vom vollständigen Warenkorb portierst, achte auf diese dualen ID-Muster: Das JavaScript in cart.js und cart-drawer.js fragt beide getElementById('cart-errors') || getElementById('CartDrawer-CartErrors') ab, weshalb das Entfernen eines der Elemente zu stillen Fehlern führen kann.
Unterstützung von Mengenregeln. Aktuelle Versionen von cart-drawer.js respektieren item.variant.quantity_rule-Beschränkungen (Mindestbestellmengen, Schritte und Maxima), was für Großhandel- und B2B-Stores wichtig ist. Wenn du benutzerdefinierte Mengenlogik hinzufügst, überprüfe, ob die quantity_rule der Variante bereits behandelt wird, bevor du deine eigene Validierungsschicht hinzufügst.
CSS gegen JS-Klassen-Kopplung. Dawns HTML nutzt dieselben Klassennamen für Styling und JavaScript-Hooks. Das Umbenennen einer CSS-Klasse wie drawer__inner-empty, ohne den entsprechenden JavaScript-Selektor zu aktualisieren, wird die Rendering des leeren Warenkorbs silently brechen.
Der Bestandswinkel, den die meisten Entwickler übersehen
Hier ist ein Muster, das für wachsende Shopify-Stores häufig auftaucht: Die Warenkorb-Schublade funktioniert perfekt, Kunden fügen Artikel hinzu, und dann ist ein Produkt zwischen dem Zeitpunkt, an dem es zum Warenkorb hinzugefügt wurde, und dem Zeitpunkt, an dem der Kunde zur Kasse geht, ausverkauft. Die Schublade hat keinen eingebauten Mechanismus, um Käufer proaktiv zu warnen. Das ist eine Theme-Layer-Einschränkung, kein Bug.
Die tatsächliche Lösung liegt upstream, auf der Bestandsverwaltungsebene. Wenn du deine Verkaufsgeschwindigkeit, Lieferfrist und Nachbestellpunkt für jede SKU kennst, kannst du Best-Seller im Bestand halten, bevor die Warenkorb-Schublade überhaupt einen "ausverkauft"-Fehler anzeigen muss. Wenn dein Team derzeit Nachbestellentscheidungen nach Bauchgefühl oder durch Starren auf eine Tabelle trifft, ist das der Ort, an dem Lagerbestände tatsächlich entstehen.
Stockcast: Inventory Forecast überwacht täglich deine Shopify-Lagerbestände, prognostiziert Lagerbestände nach Dringlichkeit mit transparenter, schrittweiser Mathematik (keine Black Box) und sendet eine tägliche Zusammenfassung, damit dein Ops-Team weiß, was vor Kunden jemals ein Verfügbarkeitsproblem im Warenkorb sehen, nachbestellt werden soll. Kostenlos bis zu 25 SKUs, 14-tägige Testversion für bezahlte Tiers.
FAQs
F: Ist cart-drawer.js in Dawns assets-Ordner dasselbe wie cart.js? Nein. cart.js enthält die CartItems-Basisklasse und die Logik für den vollständigen Warenkorb. cart-drawer.js importiert oder erweitert diese Basisklasse und fügt das Schublade-spezifische Verhalten hinzu, einschließlich der Drawer Öffnen/Schließen Web Component und der CartDrawerItems-Subclass, die DOM-Abfragen auf CartDrawer- präfixierte IDs beschränkt.
F: Wie finde ich heraus, welche Version von Dawn mein Shopify-Store ausführt? Gehe zu Online Store > Themes in deinem Shopify Admin. Die Versionsnummer ist unter deinem aktiven Theme-Namen aufgelistet. Du kannst diese Version dann einem Tag-Release im GitHub-Repository unter github.com/Shopify/dawn/releases zuordnen und die Raw-Datei für dieses genaue Tag abrufen.
F: Kann ich raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js sicher in der Produktion verwenden? Nein. Der main-Branch ist ein Entwicklungs-Branch, der Code für Funktionen enthalten kann, die noch nicht für Händler freigegeben sind. Für Produktionsreferenzen verwende immer eine Tag-Release-URL (zum Beispiel v15.4.1). Das direkte Laden der Raw-Datei von GitHub in einem Browser-Kontext ist auch aus Leistungs- und Zuverlässigkeitsgründen nicht ratsam. Bediene Assets immer über Shopifys CDN über den asset_url Liquid-Filter.
Häufig gestellte Fragen
Ist cart-drawer.js in Dawns assets-Ordner dasselbe wie cart.js?
Nein. cart.js enthält die CartItems-Basisklasse und die Logik für den vollständigen Warenkorb. cart-drawer.js erweitert diese Basis und fügt Schublade-spezifisches Verhalten hinzu, einschließlich der Drawer Web Component und CartDrawerItems, die alle DOM-Abfragen auf CartDrawer-präfixierte IDs beschränken.
Wie finde ich heraus, welche Version von Dawn mein Shopify-Store ausführt?
Gehe zu Online Store > Themes in deinem Shopify Admin. Die Versionsnummer ist unter deinem aktiven Theme-Namen aufgelistet. Du kannst sie dann einem Tag-Release auf github.com/Shopify/dawn/releases zuordnen und die Raw-Datei für dieses genaue Tag abrufen, nicht den main-Branch.
Kann ich die raw.githubusercontent.com-URL von Dawns cart-drawer.js sicher in der Produktion verwenden?
Nein. Der main-Branch kann nicht veröffentlichten Code enthalten und kann sich jederzeit ändern. Für stabile Referenz verwende eine Tag-Release-URL wie v15.4.1. Lade niemals die Raw-GitHub-URL als Skript-Quelle in der Produktion. Bediene Assets über Shopifys CDN mit dem asset_url Liquid-Filter.