Opzioni di configurazione di Node-Modules con 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:
-
Crea un
pnpmfile.jse 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-*