Settings (.npmrc)
pnpm obtiene su configuración de la línea de comandos, las variables de entorno y los archivos .npmrc
.
El comando pnpm config
se puede usar para actualizar y editar el contenido de los archivos de usuario y .npmrc
globales.
Los cuatro archivos relevantes son:
- archivo de configuración por proyecto (
/ruta/a/mi/proyecto/.npmrc
) - archivo de configuración por espacio de trabajo (el directorio que contiene el archivo
pnpm-workspace.yaml
) - archivo de configuración por usuario (
~/.npmrc
) - archivo de configuración por usuario (
/etc/npmrc
)
Todos los archivos .npmrc
son una lista con formato INI de parámetros clave = valor
.
Los valores en los archivos .npmrc
pueden contener variables env usando la sintaxis ${NAME}
. Las variables env también se pueden especificar con valores predeterminados. El uso ${NAME-fallback}
devolverá fallback
si NAME
no está configurado. El uso ${NAME:-fallback}
devolverá fallback
si NAME
no está configurado o es un text vacio.
Configuración de elevación de dependencia
hoist
- Por defecto: true
- Tipo: boolean
Cuando es true
, todas las dependencias se elevan a node_modules/.pnpm/node_modules
. Esto hace que dependencias no listadas sean accesibles a todos los paquetes dentro de node_modules
.
hoist-workspace-packages
- Por defecto: true
- Tipo: 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
- Por defecto: ['*']
- Tipo: string[]
Le dice a pnpm qué paquetes deben elevarse a node_modules/.pnpm/node_modules
. De predeterminada, todos los paquetes se elevan; sin embargo, si sabe que solo algunos paquetes tienen dependencias fantasmas, puede usar esta opción para elevar las dependencias fantasmas (recomendado).
Por ejemplo:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
También puede excluir patrones de la elevación utilizando !
.
Por ejemplo:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Default: []
- Tipo: string[]
A diferencia de hoist-pattern
, que eleva las dependencias a un directorio de módulos ocultos dentro de la tienda virtual, public-hoist-pattern
eleva las dependencias que hacen coincidir el patrón con el directorio de módulos raíz. Elevar al directorio de módulos raíz significa que el código de la aplicación tendrá acceso a las dependencias fantasma, incluso si modifican la estrategia de resolución de manera incorrecta.
Esta configuración es útil cuando se trata de algunas herramientas conectables defectuosas que resuelven las dependencias correctamente.
Por ejemplo:
public-hoist-pattern[]=*plugin*
Nota: Establecer shamefully-hoist
a true
es lo mismo que configurar public-hoist-pattern
a *
.
También puede excluir patrones de la elevación utilizando !
.
Por ejemplo:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- Por defecto: false
- Tipo: Boolean
De forma predeterminada, pnpm crea un semiestricto node_modules
, lo que significa que las dependencias tienen acceso a las dependencias no declaradas, pero los módulos fuera de node_modules
no. Con este diseño, la mayoría de los paquetes del ecosistema funcionan sin problemas. Sin embargo, si algunas herramientas solo funcionan cuando las dependencias elevadas están en la raíz de node_modules
, puede establecer esto en true
para elevarlas por usted.
Configuración de Node-Modules
modules-dir
- Por defecto: node_modules
- Tipo: path
El directorio en el que se instalarán las dependencias (en lugar de node_modules
).
node-linker
- Por defecto: aislado
- Tipo: aislado, elevado, pnp
Define qué enlazador debe usarse para instalar paquetes de Node.
- aisladas - las dependencias están vinculadas desde una tienda virtual en
node_modules/.pnpm
. - elevado - se crea un plano
node_modules
sin enlaces simbólicos. Igual que elnode_modules
creado por npm o Yarn Classic. Una de las bibliotecas de Yarn se usa para elevar, cuando se usa esta configuración. Razones legítimas para usar esta configuración:- Su herramienta no funciona bien con enlaces simbólicos. Lo más probable es que un proyecto React Native solo funcione si usa un
node_modules
elevado. - Su proyecto se implementa en un proveedor de alojamiento sin servidor. Algunos proveedores sin servidor (por ejemplo, AWS Lambda) no admiten enlaces simbólicos. Una solución alternativa para este problema es empaquetar la aplicación antes del despliegue.
- Si desea publicar su paquete con
"bundledDependencies"
. - Si está ejecutando Node.js con el indicador --preserve-symlinks.
- Su herramienta no funciona bien con enlaces simbólicos. Lo más probable es que un proyecto React Native solo funcione si usa un
- pnp - no
node_modules
. Plug'n'Play es una estrategia innovadora para Node que es utilizada por Yarn Berry. Se recomienda establecer también la configuraciónsymlink
enfalse
cuando se usapnp
como su enlazador.
symlink
- Por defecto: true
- Tipo: Boolean
Cuando symlink
se establece en false
, pnpm crea un directorio de tienda virtual sin ningún enlace simbólico. Es una configuración útil junto con node-linker=pnp
.
enable-modules-dir
- Por defecto: true
- Tipo: Boolean
Cuando false
, pnpm no escribirá ningún archivo en el directorio de módulos (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
El directorio con enlaces a la tienda. Todas las dependencias directas e indirectas del proyecto están vinculadas a este directorio.
Esta es una configuración útil que puede resolver problemas con rutas largas en Windows. Si tienes algunas dependencias con rutas muy largas, puede seleccionar un almacenamiento virtual en la raíz de su unidad (por ejemplo C:\my-project-store
).
O puede configurar el almacenamiento virtual en .pnpm
y agregarla a .gitignore
. Este hará que los seguimientos de pila sean más limpios, ya que las rutas a las dependencias estarán un directorio más arriba.
NOTA: el almacenamiento virtual no se puede compartir entre varios proyectos. Cada proyecto debe tener su propio alamcenamiento virtual (excepto en los espacios de trabajo donde se comparte la raíz).
virtual-store-dir-max-length
- Por defecto
- On Linux/macOS: 120
- On Windows: 60
- Types: number
Sets the maximum allowed length of directory names inside the virtual store directory (node_modules/.pnpm
). You may set this to a lower number if you encounter long path issues on Windows.
package-import-method
- Por defecto: auto
- Tipo: auto, hardlink, copy, clone, clone-or-copy
Controla la forma en que los paquetes se importan desde el almacenamiento (si desea deshabilitar los enlaces simbólicos dentro de node_modules
, entonces debe cambiar la configuración node-linker, no esta).
- auto - intente clonar paquetes del almacenamiento. Si no se admite la clonación entonces vincula los paquetes del almacenamiento. Si ni la clonación ni la vinculación son posibles, vuelva a copiar
- hardlink - intente clonar paquetes del almacenamiento
- clone-or-copy - intente clonar paquetes del almacenamiento. Si no se admite la clonación, vuelva a copiar
- copy - intente clonar paquetes del almacenamiento
- clone - clonar (también conocido como copia en escritura o enlace de referencia) paquetes del almacenamiento
La clonación es la mejor manera de escribir paquetes en node_modules. Es la forma más rápida y segura. Cuando se usa la clonación, puede editar archivos en sus node_modules y no se modificarán en el almacenamiento central de contenido direccionable.
Desafortunadamente, no todos los sistemas de archivos admiten la clonación. Recomendamos utilizar un sistema de archivos de copia en escritura (CoW) (por ejemplo, Btrfs en lugar de Ext4 en Linux) para obtener la mejor experiencia con pnpm.
modules-cache-max-age
- Predeterminado: 10080 (7 días en minutos)
- Tipo: Número
El tiempo en minutos después del cual se deben eliminar los paquetes huérfanos del directorio de módulos. pnpm mantiene un caché de paquetes en el directorio de módulos. Esto aumenta la velocidad de instalación al cambiar de o degradar dependencias.
dlx-cache-max-age
- Default: 1440 (1 day in minutes)
- Tipo: Número
The time in minutes after which dlx cache expires. After executing a dlx command, pnpm keeps a cache that omits the installation step for subsequent calls to the same dlx command.
Store Settings
store-dir
- Por defecto
- Si se establece la variable de entorno $PNPM_HOME, entonces $PNPM_HOME/store
- Si se establece la variable de entorno $XDG_DATA_HOME, entonces $XDG_DATA_HOME/pnpm/store
- En Windows: ~/AppData/Local/pnpm/store
- En macOS: ~/Library/pnpm/store
- En Linux: ~/.local/share/pnpm/store
- Tipo: path
La ubicación donde se guardan todos los paquetes en el disco.
El almacenamiento debe estar siempre en el mismo disco en el que se realiza la instalación, Así que habrá un almacenamiento por disco. Si hay un directorio de inicio en el disco actual, el almacenamiento se crea dentro de él. Si no hay un hogar en el disco,, entonces el almacenamiento se crea en la raíz del sistema de archivos. Por, si la instalación se realiza en un sistema de archivos montado en /mnt
, entonces el almacenamiento se creará en /mnt/.pnpm-store
. Lo mismo ocurre con los sistemas Windows.
Es posible configurar un almacenamiento desde un disco diferente, pero en ese caso, pnpm copiará los paquetes del almacenamiento en lugar de vincularlos, ya que los enlaces físicos son posibles en el mismo sistema de archivos.
verify-store-integrity
- Por defecto: true
- Tipo: Boolean
De forma predeterminada, si se ha modificado un archivo del almacenamiento, se comprueba el contenido de este archivo antes de vincularlo a la node_modules
. Si verify-store-integrity
está establecido en false
, los archivos del almacén direccionable por el contenido no se comprobarán durante la instalación.
use-running-store-server
Deprecated feature
- Por defecto: false
- Tipo: Boolean
Solo permite la instalación con un servidor de almacenamiento. Si no se está ejecutando ningún servidor de almacenamiento, instalación fallará.
strict-store-pkg-content-check
- Por defecto: true
- Tipo: Boolean
Some registries allow the exact same content to be published under different package names and/or versions. This breaks the validity checks of packages in the store. To avoid errors when verifying the names and versions of such packages in the store, you may set the strict-store-pkg-content-check
setting to false
.
Configuración de Lockfile
lockfile
- Por defecto: true
- Tipo: Boolean
When set to false
, pnpm won't read or generate a pnpm-lock.yaml
file.
prefer-frozen-lockfile
- Por defecto: true
- Tipo: 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
- Por defecto: false
- Tipo: Boolean
Add the full URL to the package's tarball to every entry in pnpm-lock.yaml
.
git-branch-lockfile
- Por defecto: false
- Tipo: 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.
Por ejemplo:
merge-git-branch-lockfiles-branch-pattern[]=main
merge-git-branch-lockfiles-branch-pattern[]=release*
You may also exclude patterns using !
.
peers-suffix-max-length
- Default: 1000
- Tipo: Número
Max length of the peer IDs suffix added to dependency keys in the lockfile. If the suffix is longer, it is replaced with a hash.
Registro & Configuración de autenticación
registry
- Predeterminado: https://registry.npmjs.org/
- Tipo: url
La URL base del registro del paquete npm (barra inclinada final incluida).
<scope>:registry
El registro npm que se debe usar para los paquetes del ámbito especificado. Para ejemplo, configuración @babel:registry=https://example.com/packages/npm/
hará cumplir eso cuando use Pnpm Agregar @babel/núcleo
, o cualquier @babel
Ámbito paquete, el paquete se recuperará de https://example.com/packages/npm
en lugar del registro predeterminado.
<URL>:_authToken
Defina la señal de portadora de autenticación que se debe utilizar al acceder al registro especificado. Por ejemplo:
//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
También puede utilizar una variable de entorno. Por ejemplo:
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
O simplemente puede usar una variable de entorno directamente, sin cambiar .npmrc
en absoluto:
npm_config_//registry.npmjs.org/:_authToken=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
<URL>:tokenHelper
Un token de ayuda es un ejecutable que genera un token de autenticación. Esto se puede usar en situaciones en las que authToken no es un valor constante sino algo que se actualiza regularmente, donde un script u otra herramienta puede usar un token de actualización existente para obtener un nuevo token de acceso.
La configuración de la ruta al asistente debe ser una ruta absoluta, sin argumentos. Para mayor seguridad, solo se permite establecer este valor en el usuario .npmrc
. De lo contrario, un proyecto podría colocar un valor en el .npmrc
local de un proyecto y ejecutar ejecutables arbitrarios.
Configuración de un token de ayuda para el registro predeterminado:
tokenHelper=/home/ivan/token-generator
Configuración de un token de ayuda para el registro predeterminado:
//registry.corp.com:tokenHelper=/home/ivan/token-generator
Ajustes de Solicitud
ca
- Valor predeterminado: El certificado CA de npm
- Tipo: Cadena, Arreglo o nulo
El certificado de firma de la autoridad de certificación en el que se confía para las conexiones SSL con el registro. Los valores deben estar en formato PEM (también conocido como "X.509 codificado en Base-64 (.CER)"). Por ejemplo:
ca="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
Se establece en nulo para permitir sólo a los registradores conocidos, o a un certificado de CA específico para confiar en sólo la autorización de firma específica.
Se puede confiar en varias CA especificando una arreglo de certificados:
ca[]="..."
ca[]="..."