Passa al contenuto principale

Opzioni di configurazione di Node-Modules con pnpm

· 2 minuti di lettura

Esistono molti modi per creare una cartella node_modules. Il tuo obiettivo deve essere quello di creare la più rigorosa, ma se ciò non è possibile, ci sono anche opzioni per creare una cartella node_modules sciolta.

Configurazione predefinita

Per impostazione predefinita, pnpm v5 crea una cartella node_modules semi-rigorosa. Semi-rigorosa significa che la tua applicazione sarà in grado di utilizzare solo i pacchetti che sono stati aggiunti come dipendenze in package.json (con alcune eccezioni). Tuttavia, le tue dipendenze saranno in grado di accedere a qualsiasi pacchetto.

La configurazione predefinita è simile a questa:

; Tutti i pacchetti vengono installati in node_modules/.pnpm/node_modules
hoist-pattern[]=*

; Tutti i tipi vengono installati alla radice per rendere felice TypeScript
public-hoist-pattern[]=*types*

; Tutti i pacchetti relativi a ESLint vengono installati alla radice anch'essi
public-hoist-pattern[]=*eslint*

Plug'n'Play. La configurazione più rigorosa

pnpm supporta il Plug'n'Play di Yarn dalla versione v5.9. Con PnP, sia la tua applicazione che le dipendenze della tua applicazione avranno accesso solo alle loro dipendenze dichiarate. Questo è ancora più rigoroso dell'impostazione hoist=false perché all'interno di un monorepo, la tua applicazione non sarà in grado di accedere nemmeno alle dipendenze del progetto root.

Per utilizzare Plug'n'Play, imposta queste impostazioni:

node-linker=pnp
symlink=false

Una cartella di moduli rigorosa e tradizionale

Se non sei ancora pronto per utilizzare PnP, puoi comunque essere rigoroso e consentire solo ai pacchetti di accedere alle proprie dipendenze impostando la configurazione dell'hoist su false:

hoist=false

Tuttavia, se alcune delle tue dipendenze stanno tentando di accedere a pacchetti che non hanno nelle dipendenze, hai due opzioni:

  1. Crea un pnpmfile.js e usa un hook per aggiungere la dipendenza mancante al manifest del pacchetto.

  2. Aggiungi un modello all'impostazione hoist-pattern. Ad esempio, se il modulo non trovato è babel-core, aggiungi la seguente impostazione a .npmrc:

    hoist-pattern[]=babel-core

Il caso peggiore - installazione alla radice

Alcuni strumenti potrebbero non funzionare anche con la configurazione predefinita di pnpm, che installa tutto alla radice dell'archivio virtuale e alcuni pacchetti alla radice. In questo caso, puoi installare tutto o un sottoinsieme di dipendenze alla radice della cartella dei moduli.

Installa tutto alla radice di node_modules:

shamefully-hoist=true

Installa solo i pacchetti che corrispondono a un modello:

public-hoist-pattern[]=babel-*