Dawn's cart-drawer.js Uitgelegd: Het Raw Bestand, Bestandsstructuur en Hoe je het Aanpast
De definitieve gids voor Shopify Dawn's cart-drawer.js raw bestand op GitHub: wat het doet, hoe het is opgebouwd en hoe je het veilig aanpast.
Het bestand op raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js is het gecompileerde JavaScript-asset dat de schuifdeur van Dawn's winkelwagen aandrijft. Het definieert het aangepaste CartDrawer element, verwerkt open/sluit-animaties, voert AJAX-winkelwagenopdrachten uit en houdt de staat van de lade gesynchroniseerd met de rest van de pagina. Als je naar die raw URL hebt gezocht, ben je vrijwel zeker bezig met het lezen, uitbreiden of debuggen van een aanpassing die iets heeft gebroken.
Belangrijkste Inzichten
cart-drawer.jsbevindt zich in Dawn'sassets/map en wordt geladen viatheme.liquidals een uitgesteld script.- De
CartDrawerklasse is een Web Component (aangepast element) datDraweruitbreidt enopen()enclose()methoden beschikbaar stelt. - De lade wordt opnieuw weergegeven door Shopify's Section Rendering API op te roepen, niet door de DOM direct te manipuleren.
- Dawn's
mainbranch op GitHub kan onuitgegeven code bevatten. De stabiele versie die naar verkopers wordt verzonden, vind je in de Shopify Theme Store. - Het rechtstreeks wijzigen van
cart-drawer.jszet je op een pad van handmatige updates. Geef de voorkeur aan app blocks of een afzonderlijk assetbestand waar mogelijk.
Waarom Ontwikkelaars Dit Raw Bestand Opzoeken
Dawn is het gratis referentiethema van Shopify. Vanaf maart 2026 ondersteunt het meer dan 268.000 actieve Shopify-winkels, waardoor het het meest verspreide thema op het platform is. Omdat de volledige bron openbaar beschikbaar is op GitHub, halen ontwikkelaars routinematig de raw URL op om:
- De
CartDrawerklasse te lezen zonder GitHub's interface te navigeren - Hun lokale kopie af te stemmen tegen de upstream
mainbranch om brekende wijzigingen na een theme-update op te sporen - Specifieke methoden (zoals
renderContents()ofgetSectionsToRender()) in een aanvullend script te kopiëren - Het pub/sub-eventsysteem te begrijpen voordat je een integratie van derden schrijft
Het bestand is source-beschikbaar, niet open-source onder een permissieve licentie, dus controleer altijd de licentievoorwaarden van Shopify voordat je een gedeelte ervan verspreidt.
Hoe het Bestand is Opgebouwd
Dawn volgt een filosofie van "HTML-eerst, JavaScript-alleen-indien-nodig", wat bepaalt hoe cart-drawer.js precies is geschreven. Dit is wat je in het bestand vindt:
Drawerbasisklasse - Een generiek Web Component datopen(),close(), focusvastlegging en hetaria-expandedattribuut verwerkt. Zowel de winkelwagenlde als het mobiele menulde erven ervan af.CartDrawerklasse - BreidtDraweruit. Bijopen()roept hetrenderContents()aan om een verse render van decart-drawersectie op te halen via Shopify's Section Rendering API, en wisselt dan de innerlijke HTML uit. Dit is waarom de lade altijd de huidige winkelwagenstaat weerspiegelt zonder pagina te herladen.CartDrawerItemsklasse - BreidtCartItemsuit (gedefinieerd incart.js). Het verwerkt hoeveelheidswijzigingen, het verwijderen van regelartikelen en foutweergave, wat het gedrag van de volledige winkelwagen weerspiegelt maar beperkt tot de DOM-ID's van de lade (voorvoegselCartDrawer-).- Event listeners - Het bestand luistert naar de
cart-updatepub/sub event zodat andere componenten (quick-add, productformulieren) een lade-vernieuwing kunnen activeren zonder direct aan deCartDrawerinstantie te koppelen.
De getSectionsToRender() methode retourneert een array van sectiedescriptoren, die elk een sectie-ID aan een selector in de HTML van de lade toewijzen. Wanneer het AJAX-antwoord aankomt, doorloopt Dawn die array en patched alleen de relevante DOM-knooppunten, waardoor re-renders chirurgisch blijven.
Hoe je het Raw Bestand op GitHub Leest
De canonieke locatie is:
https://github.com/Shopify/dawn/blob/main/assets/cart-drawer.js
Om de platte-tekstversie geschikt voor curl, fetch of een code-editor te krijgen:
https://raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js
Om vast te leggen op een specifieke release in plaats van de bewegende main branch, vervang main door een tag, bijvoorbeeld v15.4.1 (de stabiele release van december 2025). Dat geeft je een stabiele URL die niet verandert wanneer Shopify nieuwe code implementeert:
https://raw.githubusercontent.com/Shopify/dawn/v15.4.1/assets/cart-drawer.js
Opmerking: Shopify stelt expliciet dat de main branch code kan bevatten voor functies die nog niet aan verkopers zijn vrijgegeven. Als je afstemt tegen je live winkel, vergelijk dan altijd met de getagde release die overeenkomt met je geïnstalleerde versie, niet main.
Hoe je de Winkelwagenlde Aanpast Zonder het Bestand te Overschrijven
Het rechtstreeks bewerken van cart-drawer.js is de snelste route en het meest pijnlijk op lange termijn. Elke Dawn-theme update brengt een nieuwe versie van dat bestand mee, en een handmatige bewerking betekent dat je je wijzigingen handmatig opnieuw moet toepassen of verliest.
Hier zijn veiligere patronen, in volgorde van voorkeur:
- Subklasse in een afzonderlijk assetbestand. Maak
assets/cart-drawer-custom.js, importeer het nacart-drawer.jsintheme.liquid, en breidt deCartDrawerklasse uit in plaats van deze te wijzigen. Je code overleeft theme-updates. - Gebruik het pub/sub-eventsysteem. Dawn stelt een
subscribe(PUB_SUB_EVENTS.cartUpdate, callback)utility beschikbaar. Elk script kan luisteren naar winkelwagenwisselingen en reageren zonder de interne methoden van de lade aan te raken. - Gebruik een App Block. Als je een Shopify app bouwt of een herhaalbare aanpassing, stelt een App Block je in staat om HTML en script in de voettekst van de lade in te voegen zonder themabestanden helemaal te bewerken.
- No-code optie voor winkelwagentype. Ga in de Shopify-beheerder naar Online Store, Themes, Customize, Theme Settings, Cart. Je kunt het winkelwagentype tussen Drawer, Page en Notification omschakelen zonder een enkele regel code te schrijven.
Als je cart-drawer.js rechtstreeks moet bewerken (bijvoorbeeld om te wijzigen welke secties worden opgehaald in getSectionsToRender()), verversie je thema op GitHub en stel een diff-workflow in zodat je kunt zien wat op elke Dawn-release is veranderd.
Veelvoorkomende Aanpassingen en Bekende Valkuilen
De lade programmatisch openen. Het CartDrawer web component stelt een eenvoudige CartDrawer.open() methode beschikbaar die veel ontwikkelaars snel vinden. Het moeilijkere deel is het verversen van de inhoud van de lade na een externe toevoeging aan winkelwagen. Het aanbevolen patroon is om een cart-update pub/sub event na je AJAX-call naar /cart/add.js uit te zenden, in plaats van rechtstreeks interne rendermethoden aan te roepen, omdat deze interne API's tussen Dawn-versies veranderen.
DOM ID naamgevingsconventies. Dawn voegt voetvoegsel voorvoegsels toe aan lade-specifieke element-ID's met CartDrawer- (bijvoorbeeld CartDrawer-LineItemStatus, CartDrawer-CartErrors). Als je een aanpassing van de volledige winkelwagen poort, let op deze dubbele ID-patronen: de JavaScript in zowel cart.js als cart-drawer.js voert query's uit op getElementById('cart-errors') || getElementById('CartDrawer-CartErrors'), wat aangeeft waarom het verwijderen van een van de elementen tot stille fouten kan leiden.
Ondersteuning voor hoeveelheidsregels. Huidige versies van cart-drawer.js respecteren item.variant.quantity_rule beperkingen (minimale bestellingen, stappen en maxima), wat belangrijk is voor groothandel- en B2B-winkels. Als je aangepaste hoeveelheidslogica toevoegt, controleer dan of de quantity_rule van de variant al wordt verwerkt voordat je je eigen validatielaag toevoegt.
CSS versus JS klassakoppeling. Dawn's HTML gebruikt dezelfde klassenamen voor stijlen en JavaScript hooks. Het hernoemen van een CSS-klasse zoals drawer__inner-empty zonder de bijbehorende JavaScript-selector bij te werken, verbreekt de rendering van de lege-winkelwagenstaat in stilte.
Het Voorraadhoekinzicht Dat Meeste Ontwikkelaars Missen
Hier is een patroon dat zich vaak voordoet voor groeiende Shopify-winkels: de winkelwagenlade werkt perfect, klanten voegen artikelen toe, en dan gaat een product uit voorraad tussen het moment dat het aan de winkelwagen werd toegevoegd en het moment dat de klant afrekent. De lade heeft geen ingebouwd mechanisme om kopers proactief te waarschuwen. Dat is een theme-laag beperking, geen fout.
De werkelijke oplossing ligt stroomopwaarts, op de voorraadbeheerlaag. Het kennen van je verkooptempo, doorlooptijd en herbestellingspunt voor elke SKU betekent dat je best-sellers in voorraad kunt houden voordat de winkelwagenlade ooit een fout "out of stock" hoeft op te delen. Als je team op dit moment herbestellingsbeslissingen neemt op gevoel of door naar een spreadsheet te staren, is dat waar stockouts werkelijk ontstaan.
Stockcast: Inventory Forecast controleert je Shopify-voorraadhoeveelheden dagelijks, voorspelt stockouts gerangschikt op urgentie met transparante, stap-voor-stap wiskunde (geen black box), en stuurt een dagelijks overzicht zodat je operationele team weet wat je opnieuw moet bestellen voordat klanten ooit een beschikbaarheidsprobleem in de winkelwagen zien. Gratis plan tot 25 SKU's, 14-daagse proefperiode op betaalde lagen.
Veelgestelde Vragen
V: Is cart-drawer.js in Dawn's assets folder hetzelfde als cart.js? Nee. cart.js bevat de CartItems basisklasse en de logica voor de volledige winkelwagenpagina. cart-drawer.js importeert of breidt die basisklasse uit en voegt het lade-specifieke gedrag toe, inclusief het Drawer open/sluit web component en de CartDrawerItems subklasse die DOM-queries scoped naar CartDrawer- voorvoegsels.
V: Hoe kom ik erachter welke versie van Dawn mijn Shopify-winkel uitvoert? Ga naar Online Store, Themes in je Shopify-beheerder. Het versienummer wordt vermeld onder je actieve themanaam. Je kunt dat versienummer vervolgens aan een getagde release op de GitHub-repository op github.com/Shopify/dawn/releases aanpassen en het raw bestand voor die exacte tag pullen.
V: Kan ik raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js veilig in productie ophalen? Nee. De main branch is een ontwikkelingsbranch die code voor functies kan bevatten die nog niet aan verkopers zijn vrijgegeven. Gebruik voor productieverwijzing altijd een getagde release-URL (bijvoorbeeld v15.4.1). Het rechtstreeks laden van het raw bestand van GitHub in een browsercontext is ook onverstandig vanwege prestatie- en betrouwbaarheidsproblemen. Zorg dat assets altijd via Shopify's CDN via het asset_url Liquid filter worden aangeboden.
Veelgestelde vragen
Is cart-drawer.js in Dawn's assets folder hetzelfde als cart.js?
Nee. cart.js bevat de CartItems basisklasse en de volledige winkelwagenpagina logica. cart-drawer.js breidt die basis uit en voegt lade-specifiek gedrag toe, inclusief het Drawer web component en CartDrawerItems, dat alle DOM-queries scoped naar CartDrawer- voorvoegsels.
Hoe kom ik erachter welke versie van Dawn mijn Shopify-winkel uitvoert?
Ga naar Online Store, Themes in je Shopify-beheerder. Het versienummer wordt vermeld onder je actieve themanaam. Je kunt het vervolgens aan een getagde release op github.com/Shopify/dawn/releases aanpassen en het raw bestand voor die exacte tag pullen, niet de main branch.
Kan ik de raw.githubusercontent.com URL voor Dawn's cart-drawer.js veilig in productie gebruiken?
Nee. De main branch kan onuitgegeven code bevatten en kan op elk moment veranderen. Voor stabiele referentie, pin je aan een getagde release-URL zoals v15.4.1. Laad de raw GitHub-URL nooit als script src in productie. Zorg dat assets via Shopify's CDN met het asset_url Liquid filter worden aangeboden.