Passa al contenuto principale

Opzioni di configurazione di Node-Modules con pnpm

· 2 minuti di lettura
Zoltan Kochan
Lead maintainer of pnpm

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-*