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:
-
Crea un
pnpmfile.js
e usa un hook per aggiungere la dipendenza mancante al manifest del pacchetto. -
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-*