.npmrc
pnpm obtient sa configuration à partir de la ligne de commande, des variables d'environnement et des fichiers .npmrc
.
La commande pnpm config
peut être utilisée pour mettre à jour et modifier le contenu des fichiers .npmrc
utilisateur et global.
Les quatre fichiers concernés sont:
- fichier de configuration par projet (
/chemin/jusque/vers/mon/projet/.npmrc
) - fichier de configuration par espace de travail (le dossier qui contient le fichier
pnpm-workspace.yaml
) - fichier de configuration par utilisateur (
~/.npmrc
) - fichier de configuration global (
/etc/npmrc
)
Tous les fichiers .npmrc
sont une liste de paramètres clé = valeur
au format INI.
Les valeurs dans les fichiers .npmrc
peuvent contenir des variables env en utilisant la syntaxe ${NAME}
. Les variables env peuvent également être spécifiées avec les valeurs par défaut. L'utilisation de ${NAME-fallback}
retournera fallback
si NOM
n'est pas défini. ${NAME:-fallback}
will return fallback
if NAME
isn't set, or is an empty string.
Paramètres de hoisting des dépendances
hoist
- Par défaut: true
- Type: boolean
Quand true
est mis, toutes les dépendances sont hissées au node_modules/.pnpm/node_modules
. Cela rend des dépendances non listées accessibles à tous les paquets à l'intérieur de node_modules
.
hoist-workspace-packages
Added in: v8.14.0
- Par défaut: false
- Type: boolean
When true
, packages from the workspaces are symlinked to either <workspace_root>/node_modules/.pnpm/node_modules
or to <workspace_root>/node_modules
depending on other hoisting settings (hoist-pattern
and public-hoist-pattern
).
hoist-pattern
- Par défaut: ['*']
- Type: boolean
Indique à pnpm quels paquets doivent être hissés sur node_modules/.pnpm/node_modules
. Par par défaut, tous les paquets sont hissés - cependant, si vous savez que seuls quelques paquets imparfaits ont des dépendances fantômes, vous pouvez utiliser cette option pour hisser exclusivement les dépendances fantômes (recommandé).
Par exemple :
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
You may also exclude patterns from hoisting using !
.
Par exemple :
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Default: ['*eslint*', '*prettier*']
- Type: boolean
Contrairement au hoist-pattern
, qui héberge les dépendances dans un répertoire de modules cachés dans la boutique virtuelle, public-hoist-pattern
hisse les dépendances associant le patron au répertoire des modules racine. Le répertoire des modules racine signifie que le code de l'application aura accès aux dépendances fantômes, même s'ils modifient incorrectement la stratégie de résolution.
Ce paramètre est utile pour gérer certains outils branchés défectueux qui ne résolvent pas correctement les dépendances.
Par exemple :
public-hoist-pattern[]=*plugin*
Remarque : Le réglage honteusement hissé
à true
est le même que le réglage public-hoist-pattern
à *
.
You may also exclude patterns from hoisting using !
.
Par exemple :
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- Par défaut: false
- Type: Boolean
Par défaut, pnpm crée un nœud semi-strict node_modules
, ce qui signifie que les dépendances ont accès aux dépendances non déclarées, mais pas les modules en dehors de node_modules
. Avec cette mise en page, la plupart des paquets de l'écosystème fonctionnent sans problème. Cependant, si certains outils ne fonctionnent que lorsque les dépendances hissées sont à la racine de node_modules
, vous pouvez définir ceci à true
pour les hisser pour vous.
Paramètres des modules de nœud
store-dir
- Par défaut:
- If the $PNPM_HOME env variable is set, then $PNPM_HOME/store
- Si la variable env $XDG_DATA_HOME est définie, alors $XDG_DATA_HOME/pnpm/store
- Sous Windows : ~/AppData/Local/pnpm/store
- Sur macOS: ~/Library/pnpm/store
- Sous Linux : ~/.local/share/pnpm/store
- Type: chemin
L'emplacement où tous les paquets sont enregistrés sur le disque.
La boutique devrait toujours être sur le même disque sur lequel se déroule l'installation, donc il y aura un magasin par disque. S'il y a un répertoire personnel sur le disque courant, alors le magasin est créé à l'intérieur. S'il n'y a pas de maison sur le disque, alors le stockage est créé à la racine du système de fichiers. Par exemple si l'installation se produit sur un système de fichiers monté à /mnt
, alors le magasin sera créé à /mnt/. npm-store
. The same goes for Windows systems.
It is possible to set a store from a different disk but in that case pnpm will copy packages from the store instead of hard-linking them, as hard links are only possible on the same filesystem.
modules-dir
- Default: node_modules
- Type: chemin
The directory in which dependencies will be installed (instead of node_modules
).
node-linker
- Default: isolated
- Type: isolated, hoisted, pnp
Defines what linker should be used for installing Node packages.
- isolated - dependencies are symlinked from a virtual store at
node_modules/.pnpm
. - hoisted - a flat
node_modules
without symlinks is created. Same as thenode_modules
created by npm or Yarn Classic. One of Yarn's libraries is used for hoisting, when this setting is used. Legitimate reasons to use this setting:- Your tooling doesn't work well with symlinks. A React Native project will most probably only work if you use a hoisted
node_modules
. - Your project is deployed to a serverless hosting provider. Some serverless providers (for instance, AWS Lambda) don't support symlinks. An alternative solution for this problem is to bundle your application before deployment.
- If you want to publish your package with
"bundledDependencies"
. - If you are running Node.js with the --preserve-symlinks flag.
- Your tooling doesn't work well with symlinks. A React Native project will most probably only work if you use a hoisted
- pnp - no
node_modules
. Plug'n'Play is an innovative strategy for Node that is used by Yarn Berry. It is recommended to also setsymlink
setting tofalse
when usingpnp
as your linker.
symlink
- Par défaut: true
- Type: Boolean
When symlink
is set to false
, pnpm creates a virtual store directory without any symlinks. It is a useful setting together with node-linker=pnp
.
enable-modules-dir
- Par défaut: true
- Type: Boolean
When false
, pnpm will not write any files to the modules directory (node_modules
). This is useful for when the modules directory is mounted with filesystem in userspace (FUSE). There is an experimental CLI that allows you to mount a modules directory with FUSE: @pnpm/mount-modules.
virtual-store-dir
- Default: node_modules/.pnpm
- Types: path
The directory with links to the store. All direct and indirect dependencies of the project are linked into this directory.
This is a useful setting that can solve issues with long paths on Windows. If you have some dependencies with very long paths, you can select a virtual store in the root of your drive (for instance C:\my-project-store
).
Ou vous pouvez définir la boutique virtuelle à .pnpm
et l'ajouter à .gitignore
. Ce rendra la pile plus propre car les chemins vers les dépendances seront un répertoire plus élevé.
NOTE: la boutique virtuelle ne peut pas être partagée entre plusieurs projets. Chaque projet devrait avoir sa propre boutique virtuelle (sauf dans les espaces de travail où la racine est partagée).
package-import-method
- Default: auto
- Type: auto, hardlink, copy, clone, clone-or-copy
Controls the way packages are imported from the store (if you want to disable symlinks inside node_modules
, then you need to change the node-linker setting, not this one).
- auto - essayez de cloner des paquets de la boutique. Si le clonage n'est pas pris en charge alors les paquets hardlink du magasin. Si ni le clonage ni le lien ne sont possibles, retournez à la copie
- hardlink - hard link packages from the store
- clone-or-copy - try to clone packages from the store. If cloning is not supported then fall back to copying
- copy - copy packages from the store
- clone - clone (AKA copy-on-write or reference link) packages from the store
Cloning is the best way to write packages to node_modules. It is the fastest way and safest way. When cloning is used, you may edit files in your node_modules and they will not be modified in the central content-addressable store.
Unfortunately, not all file systems support cloning. We recommend using a copy-on-write (CoW) file system (for instance, Btrfs instead of Ext4 on Linux) for the best experience with pnpm.
modules-cache-max-age
- Default: 10080 (7 days in minutes)
- Type: number
The time in minutes after which orphan packages from the modules directory should be removed. pnpm keeps a cache of packages in the modules directory. This boosts installation speed when switching branches or downgrading dependencies.
Lockfile Settings
lockfile
- Par défaut: true
- Type: Boolean
When set to false
, pnpm won't read or generate a pnpm-lock.yaml
file.
prefer-frozen-lockfile
- Par défaut: true
- Type: Boolean
When set to true
and the available pnpm-lock.yaml
satisfies the package.json
dependencies directive, a headless installation is performed. A headless installation skips all dependency resolution as it does not need to modify the lockfile.
lockfile-include-tarball-url
- Par défaut: false
- Type: Boolean
Add the full URL to the package's tarball to every entry in pnpm-lock.yaml
.
git-branch-lockfile
- Par défaut: false
- Type: Boolean
When set to true
, the generated lockfile name after installation will be named based on the current branch name to completely avoid merge conflicts. For example, if the current branch name is feature-foo
, the corresponding lockfile name will be pnpm-lock.feature-foo.yaml
instead of pnpm-lock.yaml
. It is typically used in conjunction with the command line argument --merge-git-branch-lockfiles
or by setting merge-git-branch-lockfiles-branch-pattern
in the .npmrc
file.
merge-git-branch-lockfiles-branch-pattern
- Default: null
- Type: Array or null
This configuration matches the current branch name to determine whether to merge all git branch lockfile files. By default, you need to manually pass the --merge-git-branch-lockfiles
command line parameter. This configuration allows this process to be automatically completed.
Par exemple :
merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*
You may also exclude patterns using !
.
Registry & Authentication Settings
registry
- Default: https://registry.npmjs.org/
- Type: url
The base URL of the npm package registry (trailing slash included).
<scope>:registry
The npm registry that should be used for packages of the specified scope. For example, setting @babel:registry=https://example.com/packages/npm/
will enforce that when you use pnpm add @babel/core
, or any @babel
scoped package, the package will be fetched from https://example.com/packages/npm
instead of the default registry.
<URL>:_authToken
Define the authentication bearer token to use when accessing the specified registry. Par exemple:
//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
You may also use an environment variable. Par exemple:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
Or you may just use an environment variable directly, without changing .npmrc
at all:
npm_config_//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
<URL>:tokenHelper
A token helper is an executable which outputs an auth token. This can be used in situations where the authToken is not a constant value but is something that refreshes regularly, where a script or other tool can use an existing refresh token to obtain a new access token.
The configuration for the path to the helper must be an absolute path, with no arguments. In order to be secure, it is only permitted to set this value in the user .npmrc
. Otherwise a project could place a value in a project's local .npmrc
and run arbitrary executables.
Setting a token helper for the default registry:
tokenHelper=/home/ivan/token-generator
Setting a token helper for the specified registry:
//registry.corp.com:tokenHelper=/home/ivan/token-generator
Request Settings
ca
- Default: The npm CA certificate
- Type: String, Array or null
The Certificate Authority signing certificate that is trusted for SSL connections to the registry. Values should be in PEM format (AKA "Base-64 encoded X.509 (.CER)"). Par exemple:
ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Set to null to only allow known registrars, or to a specific CA cert to trust only that specific signing authority.
Multiple CAs can be trusted by specifying an array of certificates:
ca[]="..."
ca[]="..."
See also the strict-ssl
config.