Passer au contenu principal

Options de configuration des node_modules avec pnpm

· 2 mins à lire

Il existe de nombreuses façons de créer un dossier node_modules. Votre objectif doit être de créer le plus strict, mais si ce n'est pas possible, il y a aussi des options pour faire un node_modules en vrac.

Configuration par défaut

Par défaut, pnpm v5 créera un node_modules semi-strict. Semi-strict signifie que votre application ne pourra require que des packages ajoutés en tant que dépendances au package.json (à quelques exceptions près). Cependant, vos dépendances pourront accéder à tous les packages.

La configuration par défaut ressemble à ceci:

; Tous les packages sont hissés vers node_modules/.pnpm/node_modules
hoist-pattern[]=*

; Tous les types sont hissés à la racine afin de rendre TypeScript heureux
public-hoist-pattern[]=*types*

; Tous les packages liés à ESLint sont également hissés à la racine
public-hoist-pattern[]=*eslint*

Plug'n'Play. La configuration la plus stricte

pnpm prend en charge Yarn's Plug'n'Play depuis la version 5.9. Avec PnP, votre application et les dépendances de votre application n'auront accès qu'à leurs dépendances déclarées. C'est encore plus strict que de définir hoist=false car à l'intérieur d'un monorepo, votre application ne pourra même pas accéder aux dépendances du projet racine.

Pour utiliser Plug'n'Play, définissez ces paramètres:

node-linker=pnp
symlink=false

Un répertoire de node_modules strict et traditionnel

Si vous n'êtes pas encore prêt à utiliser PnP, vous pouvez toujours être strict et autoriser uniquement les packages à accéder à leurs propres dépendances en définissant la configuration de hoist sur false:

hoist=false

Cependant, si certaines de vos dépendances tentent d'accéder à des packages qui ne figurent pas dans leurs dépendances, vous avez deux options:

  1. Créez un pnpmfile.js et utilisez un crochet pour ajouter la dépendance manquante au manifeste du package.

  2. Ajoutez un pattern au paramètre hoist-pattern. Par exemple, si le module non trouvé est babel-core, ajoutez le paramètre suivant à .npmrc:

    hoist-pattern[]=babel-core

Le pire des cas - hisser à la racine

Certains outils peuvent ne pas fonctionner même avec la configuration par défaut de pnpm, qui héberge tout à la racine du magasin virtuel et quelques packages à la racine. Dans ce cas, vous pouvez hisser tout ou un sous-ensemble de dépendances à la racine du répertoire des modules.

Tout hisser à la racine de node_modules :

shamefully-hoist=true

Ne hisser que les packages qui correspondent à un modèle:

public-hoist-pattern[]=babel-*