Dawn's cart-drawer.js Spiegato: Il File Grezzo, la Struttura del File e Come Personalizzarlo
La guida definitiva al file grezzo cart-drawer.js di Shopify Dawn su GitHub: cosa fa, come è strutturato e come personalizzarlo in sicurezza.
Il file all'indirizzo raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js è l'asset JavaScript compilato che alimenta il cassetto del carrello scorrevole di Dawn. Definisce l'elemento personalizzato CartDrawer, gestisce le animazioni di apertura/chiusura, attiva gli aggiornamenti del carrello AJAX e mantiene lo stato del cassetto sincronizzato con il resto della pagina. Se hai cercato quell'URL grezzo, stai quasi certamente cercando di leggere il codice sorgente, estenderlo o eseguire il debug di una personalizzazione che ha rotto qualcosa.
Punti Chiave
cart-drawer.jssi trova nella cartellaassets/di Dawn e viene caricato tramitetheme.liquidcome script differito.- La classe
CartDrawerè un Web Component (elemento personalizzato) che estendeDrawered espone i metodiopen()eclose(). - Il cassetto si re-renderizza recuperando l'API di Section Rendering di Shopify, non manipolando direttamente il DOM.
- Il branch
maindi Dawn su GitHub potrebbe contenere codice non ancora rilasciato; la versione stabile fornita ai commercianti è quella che trovi nello Shopify Theme Store. - Modificare direttamente
cart-drawer.jsti mette su un percorso di aggiornamento manuale. Preferisci app block o un file asset separato quando possibile.
Perché gli Sviluppatori Cercano Questo File Grezzo
Dawn è il tema di riferimento gratuito di punta di Shopify. A marzo 2026, alimenta oltre 268.000 negozi Shopify attivi, rendendolo il tema più distribuito sulla piattaforma. Poiché il codice sorgente completo è pubblico su GitHub, gli sviluppatori regolarmente estraggono l'URL grezzo per:
- Leggere la classe
CartDrawersenza navigare l'interfaccia utente di GitHub - Confrontare la loro copia locale rispetto al branch
maina monte per individuare i cambiamenti che rompono le funzionalità dopo un aggiornamento del tema - Copiare metodi specifici (come
renderContents()ogetSectionsToRender()) in uno script complementare - Comprendere il sistema di evento pub/sub prima di scrivere un'integrazione di terze parti
Il file è disponibile con il codice sorgente, non open-source con una licenza permissiva, quindi controlla sempre i termini di licenza di Shopify prima di ridistribuire qualsiasi parte di esso.
Come è Strutturato il File
Dawn segue una filosofia "HTML-first, JavaScript-only-as-needed", che modella esattamente come è scritto cart-drawer.js. Ecco cosa troverai dentro il file:
- Classe base
Drawer- Un Web Component generico che gestisceopen(),close(), focus trapping e l'attributoaria-expanded. Sia il cassetto del carrello che il cassetto del menu mobile ereditano da essa. - Classe
CartDrawer- EstendeDrawer. Suopen(), chiamarenderContents()per recuperare un rendering fresco della sezionecart-drawertramite l'API di Section Rendering di Shopify, quindi scambia l'HTML interno. È per questo che il cassetto riflette sempre lo stato attuale del carrello senza un ricaricamento della pagina. - Classe
CartDrawerItems- EstendeCartItems(definita incart.js). Gestisce i cambi di quantità, la rimozione di articoli e la visualizzazione degli errori, rispecchiando il comportamento del carrello a pagina intera ma circoscritto agli ID DOM del cassetto (prefissoCartDrawer-). - Event listener - Il file ascolta l'evento pub/sub
cart-updatein modo che altri componenti (quick-add, moduli di prodotto) possano attivare un aggiornamento del cassetto senza accoppiarsi direttamente all'istanzaCartDrawer.
Il metodo getSectionsToRender() restituisce un array di descrittori di sezione, ognuno mappando un ID di sezione a un selettore all'interno dell'HTML del cassetto. Quando arriva la risposta AJAX, Dawn itera quell'array e applica patch solo ai nodi DOM rilevanti, mantenendo i re-render chirurgici.
Come Leggere il File Grezzo su GitHub
La posizione canonica è:
https://github.com/Shopify/dawn/blob/main/assets/cart-drawer.js
Per ottenere la versione in testo semplice adatta a curl, fetch o un editor di codice:
https://raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js
Per fissare una release specifica piuttosto che il branch main in movimento, sostituisci main con un tag, ad esempio v15.4.1 (la release stabile di dicembre 2025). Questo ti dà un URL stabile che non cambierà quando Shopify spedisce nuovo codice:
https://raw.githubusercontent.com/Shopify/dawn/v15.4.1/assets/cart-drawer.js
Nota: Shopify afferma esplicitamente che il branch main potrebbe contenere codice per funzionalità non ancora rilasciate ai commercianti. Se stai confrontando il tuo negozio live, confronta sempre con la release taggata che corrisponde alla versione installata, non con main.
Come Personalizzare il Cassetto del Carrello Senza Sovrascrivere il File
Modificare cart-drawer.js direttamente è il percorso più veloce e il più doloroso a lungo termine. Ogni aggiornamento del tema Dawn spedisce una nuova versione di quel file, e una modifica manuale significa che devi riapplicare le tue modifiche a mano o perderle.
Ecco modelli più sicuri, in ordine di preferenza:
- Sottoclasse in un file asset separato. Crea
assets/cart-drawer-custom.js, importalo dopocart-drawer.jsintheme.liquide estendi la classeCartDrawerpiuttosto che modificarla. Il tuo codice sopravvive agli aggiornamenti del tema. - Usa il sistema di evento pub/sub. Dawn espone un'utilità
subscribe(PUB_SUB_EVENTS.cartUpdate, callback). Qualsiasi script può ascoltare i cambi del carrello e reagire senza toccare i metodi interni del cassetto. - Usa un App Block. Se stai costruendo un'app Shopify o una personalizzazione ripetibile, un App Block ti permette di iniettare HTML e script nel footer del cassetto senza modificare affatto i file del tema.
- Opzione no-code per il tipo di carrello. In Shopify admin, vai a Online Store > Themes > Customize > Theme Settings > Cart. Puoi cambiare il tipo di carrello tra Drawer, Page e Notification senza scrivere una sola riga di codice.
Se devi effettivamente modificare cart-drawer.js direttamente (ad esempio, per cambiare quali sezioni vengono recuperate in getSectionsToRender()), metti il tuo tema sotto controllo di versione su GitHub e configura un flusso di lavoro diff in modo da poter vedere cosa è cambiato su ogni release di Dawn.
Personalizzazioni Comuni e Gotcha Noti
Apertura del cassetto a livello di programmazione. Il web component CartDrawer espone un metodo CartDrawer.open() semplice che molti sviluppatori trovano rapidamente. La parte più difficile è aggiornare il contenuto del cassetto dopo un add-to-cart esterno. Il modello consigliato è inviare un evento pub/sub cart-update dopo la tua chiamata AJAX a /cart/add.js, piuttosto che chiamare direttamente i metodi di render interni, perché queste API interne cambiano tra le versioni di Dawn.
Convenzioni di denominazione degli ID DOM. Dawn antepone agli ID degli elementi specifici del cassetto il prefisso CartDrawer- (ad esempio, CartDrawer-LineItemStatus, CartDrawer-CartErrors). Se stai portando una personalizzazione dal carrello a pagina intera, fai attenzione a questi modelli di ID doppi: il JavaScript in cart.js e cart-drawer.js interroga entrambi getElementById('cart-errors') || getElementById('CartDrawer-CartErrors'), motivo per cui rimuovere uno degli elementi può produrre errori silenziosi.
Supporto delle regole di quantità. Le versioni attuali di cart-drawer.js rispettano i vincoli item.variant.quantity_rule (quantità di ordine minime, incrementi e massimi), il che è importante per i negozi all'ingrosso e B2B. Se stai aggiungendo logica di quantità personalizzata, controlla se il quantity_rule della variante è già gestito prima di aggiungere il tuo livello di convalida.
Accoppiamento tra classe CSS e JS. L'HTML di Dawn usa gli stessi nomi di classe per lo stile e gli hook JavaScript. Rinominare una classe CSS come drawer__inner-empty senza aggiornare il selettore JavaScript corrispondente romperà silenziosamente il rendering dello stato del carrello vuoto.
L'Angolo dell'Inventario Che la Maggior Parte degli Sviluppatori Non Considera
Ecco un modello che emerge spesso per i negozi Shopify in crescita: il cassetto del carrello funziona perfettamente, i clienti aggiungono articoli e poi un prodotto esce da stock tra il momento in cui è stato aggiunto al carrello e il momento in cui il cliente procede al checkout. Il cassetto non ha un meccanismo integrato per avvertire i clienti in modo proattivo. È una limitazione dello strato del tema, non un bug.
La vera soluzione vive a monte, al livello di gestione dell'inventario. Conoscere il tasso di vendita, il lead time e il punto di riordino per ogni SKU significa che puoi mantenere i best-seller in stock prima che il cassetto del carrello debba mai visualizzare un errore "out of stock". Se il tuo team attualmente prende decisioni di riordino a sensazione o osservando un foglio di calcolo, è lì che gli stockout effettivamente originano.
Stockcast: Inventory Forecast monitora i tuoi livelli di stock Shopify giornalmente, prevede gli stockout classificati per urgenza con matematica trasparente e passo dopo passo (non una scatola nera) e invia un digest giornaliero in modo che il tuo team operativo sappia cosa riordinare prima che i clienti vedano mai un problema di disponibilità nel carrello. Piano gratuito fino a 25 SKU, prova di 14 giorni sui piani a pagamento.
Domande Frequenti
D: Il file cart-drawer.js nella cartella assets di Dawn è lo stesso di cart.js? No. cart.js contiene la classe base CartItems e la logica per il carrello a pagina intera. cart-drawer.js importa o estende quella classe base e aggiunge il comportamento specifico del cassetto, incluso il web component Drawer open/close e la sottoclasse CartDrawerItems che circoscrive le interrogazioni DOM agli ID con prefisso CartDrawer-.
D: Come faccio a scoprire quale versione di Dawn sta eseguendo il mio negozio Shopify? Vai a Online Store > Themes nel tuo Shopify admin. Il numero di versione è elencato sotto il nome del tuo tema attivo. Puoi quindi abbinare quella versione a una release taggata nel repository GitHub all'indirizzo github.com/Shopify/dawn/releases e estrarre il file grezzo per quel tag esatto.
D: Posso estrarre in sicurezza raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js da usare in produzione? No. Il branch main è un branch di sviluppo che potrebbe includere codice per funzionalità non ancora rilasciate ai commercianti. Per il riferimento in produzione, usa sempre un URL di release taggato (ad esempio, v15.4.1). Caricare il file grezzo direttamente da GitHub in un contesto browser è anche sconsigliabile per motivi di prestazioni e affidabilità; servi sempre gli asset attraverso la CDN di Shopify tramite il filtro Liquid asset_url.
Domande frequenti
Il file cart-drawer.js nella cartella assets di Dawn è lo stesso di cart.js?
No. cart.js contiene la classe base CartItems e la logica del carrello a pagina intera. cart-drawer.js estende quella base e aggiunge il comportamento specifico del cassetto, incluso il web component Drawer e CartDrawerItems, che circoscrive tutte le interrogazioni DOM agli ID con prefisso CartDrawer-.
Come faccio a scoprire quale versione di Dawn sta eseguendo il mio negozio Shopify?
Vai a Online Store > Themes nel tuo Shopify admin. Il numero di versione è elencato sotto il nome del tuo tema attivo. Puoi quindi abbinarlo a una release taggata su github.com/Shopify/dawn/releases ed estrarre il file grezzo per quel tag esatto, non il branch main.
Posso usare in sicurezza l'URL raw.githubusercontent.com per cart-drawer.js di Dawn in produzione?
No. Il branch main potrebbe includere codice non rilasciato e può cambiare in qualsiasi momento. Per un riferimento stabile, fissa un URL di release taggato come v15.4.1. Non caricare mai l'URL GitHub grezzo come src di uno script in produzione; servi gli asset attraverso la CDN di Shopify usando il filtro Liquid asset_url.