0Pricing
React Academy · Lezione

Dipendenze peer e tree shaking

Dichiarare React come dipendenza peer, abilitare il tree shaking senza effetti collaterali e testare il pacchetto pubblicato

Dipendenze peer e tree shaking è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Cosa sono le peer dependencies?

Le peer dependencies dichiarano i pacchetti richiesti dalla libreria, che tuttavia si aspetta vengano forniti dal consumer. Nel package.json della libreria, React deve trovarsi in peerDependencies, non in dependencies. Quando un utente installa la libreria, npm/yarn non installa automaticamente React: l'app dell'utente ha già React e la libreria condivide quella stessa istanza.

Perché non inserire React in dependencies?

Se React si trova nelle dependencies della libreria, npm potrebbe installare una seconda copia di React accanto a quella del consumer. Due istanze di React nella stessa app interrompono tutti gli hook e causano l'errore "Invalid hook call". Dichiarando React come peerDependency, comunica a npm: "Mi serve React, ma utilizzi quello che il consumer ha già."

peerDependenciesMeta per le peer opzionali

Alcune peer dependencies possono essere opzionali, ad esempio una libreria che supporta sia styled-components sia CSS Modules. Contrassegni le peer opzionali utilizzando peerDependenciesMeta: { 'styled-components': { optional: true } }. npm non mostrerà agli utenti avvisi relativi alle peer opzionali mancanti, ma i tipi TypeScript potranno comunque essere forniti quando il pacchetto opzionale sarà installato.

Il campo sideEffects

Il campo sideEffects in package.json indica ai bundler se la libreria può essere sottoposta al tree-shaking in sicurezza. Impostare "sideEffects": false comunica a webpack, Rollup e strumenti simili che l'importazione di qualsiasi modulo della libreria non produce effetti collaterali: tutte le esportazioni inutilizzate possono essere rimosse senza rischi dal bundle del consumer.

sideEffects con import CSS

Gli import CSS sono un effetto collaterale comune: iniettano gli stili nella pagina come effetto dell'importazione. Se la libreria importa file CSS, imposti "sideEffects": ["*.css", "*.scss"] per comunicare ai bundler che i file JS possono essere sottoposti al tree-shaking, mentre i file CSS devono essere sempre inclusi quando vengono importati.

Tree-shaking granulare con named export

Per ottenere il massimo dal tree-shaking, esporti ogni componente come named export dal proprio file. Nel file index.ts, riesporti tutto: export { Button } from './Button'. Quando un consumer importa solo Button, il bundler può eliminare tutti gli altri componenti. I barrel file con riesportazioni consentono di adottare questo schema.

Testare l'efficacia del tree-shaking

Utilizzi bundlejs.com per testare il tree-shaking: incolli la sua istruzione di importazione e il servizio riporta le dimensioni effettive del bundle. Il pacchetto npm size-limit consente di definire budget delle dimensioni nel package.json e di interrompere la CI se le dimensioni dell'import superano il limite: "size-limit": [{ "path": "dist/index.js", "limit": "10 KB" }].

Budget delle dimensioni in pubblicazione

Definisca un budget delle dimensioni per gli import della libreria. Esegua npx size-limit nella CI per farlo rispettare. Un aumento nel tempo dell'impatto del bundle indica un'espansione incontrollata dell'ambito. Una libreria di componenti mirata dovrebbe mantenere gli import dei singoli componenti al di sotto di pochi kilobyte. Rilevi le regressioni prima che raggiungano i consumer.

Librerie CSS-in-JS nelle librerie di componenti

Eviti styled-components ed Emotion nelle librerie di componenti che intende distribuire. Queste soluzioni CSS-in-JS a runtime richiedono che il consumer installi la stessa libreria e la stessa versione, creando conflitti tra peer dependencies. Se il consumer utilizza Tailwind o CSS semplice, deve comunque includere nel bundle il runtime CSS-in-JS. Preferisca CSS Modules, che vengono compilati in CSS semplice durante la build.

CSS Modules nelle librerie

I CSS Modules funzionano bene nelle librerie se combinati con un bundler che li elabora. tsup e Rollup possono incorporare l'output dei CSS Modules utilizzando nomi di classe con scope. Il consumer non deve configurare nulla: gli stili sono già isolati e inclusi nel bundle JS oppure in un file CSS separato che viene importato.

devDependencies e peerDependencies

I propri strumenti di sviluppo (tsup, TypeScript, librerie di test, Storybook) vanno inseriti in devDependencies: servono solo durante lo sviluppo e sono esclusi dall'installazione npm per i consumer. React va inserito sia in peerDependencies (requisito a runtime) sia in devDependencies (necessario per compilare e testare localmente la libreria).

Significato del campo sideEffects

Cosa comunica ai bundler l'impostazione "sideEffects": false nel package.json di una libreria?

Riepilogo della lezione: peer dependencies e tree-shaking

Dichiari React in peerDependencies (non in dependencies), così i consumer condividono l'istanza di React della propria app. sideEffects: false abilita il tree-shaking completo della libreria. Utilizzi sideEffects: ['*.css'] per proteggere gli import CSS dall'eliminazione. I named export provenienti da singoli file massimizzano la granularità del tree-shaking. Imponga un budget delle dimensioni con size-limit nella CI. Preferisca CSS Modules a CSS-in-JS nelle librerie per evitare conflitti tra peer dependencies.

Domande Frequenti

La lezione «Dipendenze peer e tree shaking» è gratuita?

Sì — il testo completo di «Dipendenze peer e tree shaking» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «Dipendenze peer e tree shaking»?

Dichiarare React come dipendenza peer, abilitare il tree shaking senza effetti collaterali e testare il pacchetto pubblicato Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Dipendenze peer e tree shaking»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Bundling con Rollup e tsup per le librerie
  2. Output duale dei pacchetti ESM e CJS
  3. Dipendenze peer e tree shaking
  4. Pubblicare su npm e versionamento semantico
← Torna a React Academy