Condivisione della tecnologia

Gestori di pacchetti: confronto tra npm, filato, cnpm, pnpm

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. npm (gestione pacchetti node)

1.1 Installazione locale

Utilizza il comando: npm install package name o npm i package name
I pacchetti installati localmente vengono visualizzati nella directory node_module nella directory corrente
Se il pacchetto installato localmente ha una CLI, npm inserirà il suo script CLI in node_modules/.bin e utilizzerà il comando npx per chiamarlo.

1.2 Installazione globale

I pacchetti installati a livello globale vengono posizionati in una directory globale speciale.
Utilizza il comando npm install --global package name o npm i -g package name.
Il pacchetto installato a livello globale non è disponibile per tutti i progetti, fornisce solo strumenti CLI globali. Nella maggior parte dei casi non è necessario installare il pacchetto a livello globale.

1.3 Comando di installazione

Dipende dall'ambiente di produzione
npm i nome del pacchetto
npm i --salva il nome del pacchetto
npm i -S nome del pacchetto
Installare le dipendenze nell'ambiente di sviluppo
npm i --save-dev nome del pacchetto
npm i -D nome del pacchetto

1.4. Quando si utilizza nodejs per importare un modulo, se il percorso del modulo non inizia con ./ o.../, node penserà che il modulo importato provenga dalla directory node_modules.
1.5.npm

Configura i comandi CLI di uso comune nel campo script di package.json e utilizza il nome dello script di esecuzione npm per eseguire lo script. npx può essere omesso nello script.

2. Problemi passati con npm:

  • Le directory delle dipendenze sono profondamente annidate: in passato, le dipendenze npm erano annidate e il sistema Windows non poteva supportare directory troppo profonde.
  • Velocità di download lenta: a causa dei livelli di annidamento profondi, i download dei pacchetti possono essere eseguiti solo in serie;
  • L'output della console è complesso: stampa molti dettagli del pacchetto
  • Problema di trapianto del progetto: in passato era presente solo il file di configurazione package.json, ma nessun file package-lock.json.

3. L'emergere del filato perché presenta i seguenti vantaggi:

  • Utilizzare una struttura di directory piatta
  • Scaricamento parallelo
  • Utilizza la cache locale
  • Semplifica le informazioni di output della console e genera solo le informazioni chiave
  • Utilizza il file Yarn-Lock per registrare le dipendenze esatte

4. Influenzato dal filato, npm6 ha attinto ai concetti avanzati del filato e ha apportato le seguenti ottimizzazioni:

  • Appiattimento delle directory
  • Scaricamento parallelo
  • cache locale
  • Utilizza package-lock.json per registrare le dipendenze esatte
  • Aggiunto un gran numero di alias di comando
  • Npx integrato, puoi avviare gli strumenti CLI locali
  • Semplifica notevolmente l'output della console

5. CNPM

Il server del registro di npm è all'estero, il che potrebbe causare download lenti o non riusciti. In passato, npm non forniva la funzione di modifica del registro. Taobao ha creato il proprio registro, che è il mirror Taobao npm. Taobao fornisce anche uno strumento CLI cnpm. Gli altri usi sono sostanzialmente gli stessi di npm.

6. PNPM

  • Come npm e Yarn, la cache viene ancora utilizzata per salvare i pacchetti installati.Utilizza pnpm-lock.yaml per registrare versioni dettagliate delle dipendenze
  • Diversamente da Yarn e NPM, pnpm utilizza collegamenti simbolici e collegamenti reali per posizionare le dipendenze, evitando la copia di file, migliorando l'efficienza dell'installazione e riducendo notevolmente l'utilizzo dello spazio su disco.
  • Grazie all'uso di collegamenti simbolici e collegamenti reali, pnpm può evitare il problema di percorsi troppo lunghi nei sistemi Windows, quindi utilizza dipendenze ad albero. A causa delle dipendenze dell'albero, i progetti possono utilizzare solo dipendenze dirette, non dipendenze indirette.

7. Principio pnpm:

  • L'essenza di un file: il file è in realtà un puntatore che punta a un indirizzo di archiviazione esterno (disco rigido, unità flash USB). L'eliminazione di un file elimina effettivamente il puntatore, quindi è molto veloce.
  • Copia del file: copia il contenuto indicato dal puntatore del file, quindi genera un nuovo puntatore che punta al nuovo contenuto.
  • Collegamento reale: copia un puntatore del file A su un altro puntatore del file B. Il file B è un collegamento reale al file A.
  • Collegamento simbolico (collegamento software): crea un collegamento simbolico B per un file o una cartella A, quindi B punta ad A.
  • Scorciatoia: simile a un collegamento simbolico, è un metodo di collegamento supportato inizialmente da Windows. Non è solo un puntatore, ma contiene anche diverse informazioni come autorizzazioni, compatibilità e metodi di avvio. I collegamenti sono esclusivi dei sistemi Windows e non vengono utilizzati su tutte le piattaforme.

La differenza tra collegamenti simbolici e collegamenti fisici

  • I collegamenti reali possono collegare solo file, mentre i collegamenti simbolici possono collegare file e directory.
  • Una volta completata la connessione, il collegamento reale è associato solo al contenuto del file e non ha nulla a che fare con il collegamento precedente. I collegamenti simbolici sono sempre associati al file precedentemente collegato e non sono direttamente associati al file di contenuto.