Settings (.npmrc)
O pnpm obtém sua configuração da linha de comando, variáveis de ambiente e arquivos .npmrc
.
O comando pnpm config
pode ser usado para atualizar e editar o conteúdo dos arquivos user e global .npmrc
.
Os quatro arquivos relevantes são:
- arquivo de configuração por projeto (
/path/to/my/project/.npmrc
) - arquivo de configuração por área de trabalho (o diretório que contém o arquivo
pnpm-workspace.yaml
) - arquivo de configuração por usuário (
~/.npmrc
) - arquivo de configuração global (
/etc/npmrc
)
Todos os arquivos .npmrc
são listas formatadas em INI de parâmetros chave = valor
.
Os valores nos arquivos .npmrc
podem conter variáveis env usando a sintaxe ${NAME}
. As variáveis env também podem ser especificadas com valores padrão. Usar ${NAME-fallback}
retornará fallback
se NAME
não estiver definido. ${NAME:-fallback}
retornará fallback
se NAME
não estiver definido ou for uma string vazia.
Configurações de elevação de dependência
hoist
- Valor padrão: false
- Tipo: Boolean
Quando true
, todas as dependências são elevadas para node_modules/.pnpm/node_modules
. Isso torna as dependências não listadas acessíveis a todos os pacotes dentro da node_modules
.
hoist-workspace-packages
- Valor padrão: 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
- Valor padrão: false
- Tipo: Boolean
Diz ao pnpm quais pacotes devem ser elevados para a node_modules/.pnpm/node_modules
. Por padrão, todos os pacotes são elevados, contudo, se você sabe que apenas alguns pacotes falhos têm dependências fantasmas, você pode usar esta opção para elevar especificamente as dependências fantasmas (recomendado).
Por exemplo:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
Você também pode excluir padrões de serem elevados usando !
.
Por exemplo:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Default: []
- Tipo: Boolean
Ao contrário de hoist-pattern
, que eleva dependências para um diretório de módulos ocultos dentro da loja virtual, public-hoist-pattern
eleva dependências que correspondem ao padrão ao diretório de módulos raiz. O Hoisting para o diretório raiz dos módulos significa que o código de aplicação terá acesso a dependências fantasmas, mesmo se modificarem a estratégia de resolução impropriamente.
Essa configuração é útil ao lidar com algumas ferramentas conectáveis defeituosas que não resolvem as dependências adequadamente.
Por exemplo:
public-hoist-pattern[]=*plugin*
Nota: Definir shamefully-hoist
para true
é o mesmo que definir public-hoist-pattern
para *
.
Você também pode excluir padrões do hoisting usando !
.
Por exemplo:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- Padrão: low
- Tipo: Boolean
Por padrão, o pnpm cria uma node_modules
semi estrita, o que significa que as dependências têm acesso a dependências não declaradas, mas os módulos fora da node_modules
não tem. Com esse layout, a maioria dos pacotes no ecossistema funciona sem problemas. No entanto, se alguma ferramenta só funciona quando as dependências elevadas estiverem na raiz da node_modules
, você pode definir essa opção como true
para elevar elas para você.
Configurações de Módulos Node
modules-dir
- Padrão: node_modules
- Tipo: caminho
O diretório que as dependências serão instaladas (ao invés de node_modules
).
node-linker
- Padrão: ** isolated **
- Tipo: isolated, hoisted, pnp
Define qual linker deve ser usado para instalar os pacotes do Node.
- isolated - as dependências são vinculadas a partir de uma loja virtual em
node_modules/.pnpm
. - hoisted - um
node_modules
limpo sem links simbólicos é criado. O mesmo quenode_modules
criado por npm ou Yarn Classic. Uma das bibliotecas do Yarn é usada para fazer o hoisting quando essa configuração é usada. Razões legítimas para usar esta configuração:- Suas ferramentas não funcionam bem com links simbólicos. Um Projeto Native reagirá muito provavelmente só funcionará se você usar um hoisted
node_modules
. - Seu projeto é implantado em um provedor de hospedagem sem servidor. Alguns provedores sem servidor (por exemplo, AWS Lambda) não oferecem suporte a links simbólicos. Uma solução alternativa para esse problema é agrupar seu aplicativo antes da implantação.
- Se você deseja publicar seu pacote com
"bundledDependencies"
. - Se você estiver executando o Node.js com o parâmetro --preserve-symlinks.
- Suas ferramentas não funcionam bem com links simbólicos. Um Projeto Native reagirá muito provavelmente só funcionará se você usar um hoisted
- pnp - sem
node_modules
. Plug'n'Play é uma estratégia inovadora para Node que é utilizada pelo Yarn Berry. Recomenda-se também definir a configuraçãosymlink
parafalse
ao usarpnp
como seu vinculador.
symlink
- Valor padrão: true
- Tipo: Boolean
Quando o symlink
é configurado para false
, o pnpm cria o diretório virtual da store sem symlinks. É uma configuração útil junto com node-linker=pnp
.
enable-modules-dir
- Padrão: true
- Tipo: Boolean
Quando false
, o pnpm não gravará nenhum arquivo no diretório de módulos (node_modules
). Isso é útil quando o diretório de módulos é montado com sistema de arquivos no espaço do usuário (FUSE). Existe uma CLI experimental que permite montar um diretório de módulos com FUSE: @pnpm/mount-modules.
virtual-store-dir
- Padrão: node_modules/.pnpm
- Tipo: caminho
O diretório com links para o armazenamento. Todas as dependências diretas e indiretas do projeto estão vinculadas a este diretório.
Essa é uma configuração útil que pode resolver problemas com caminhos longos no Windows. Se você tiver algumas dependências com caminhos muito longos, você pode selecionar um armazenamento virtual na raiz da sua unidade (por exemplo, C:\my-project-store
).
Ou você pode defiinr o armazenamento virtual como .pnpm
e adicioná-lo a .gitignore
. Isto tornará os rastreamentos de pilha mais limpos, pois os caminhos para as dependências estarão um diretório acima.
NOTA: o armazenamento virtual não pode ser compartilhado entre vários projetos. Cada projeto deve ter seu próprio armazenamento virtual (exceto em espaços de trabalho onde a raiz é compartilhada).
virtual-store-dir-max-length
- Padrão:
- 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
- Padrão: 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 - tente clonar pacotes da loja. Se a clonagem não for suportada, então os pacotes hardlink da loja. Se nem a clonagem nem a vinculação forem possíveis, volte a copiar
- hardlink - pacotes de links rígidos da loja
- clone-or-copy - tenta clonar pacotes a partir da store. Se a clonagem não é suportada, então volte para copia comum
- copy - copia pacotes da loja
- clone - pacotes clone (também conhecido como
copy-on-write
ou link de referência) da loja
A clonagem é a melhor maneira de escrever pacotes em node_modules. É o caminho mais rápido e seguro. Quando a clonagem é usada, você pode editar arquivos em seus node_modules e eles não serão modificados no armazenamento endereçável de conteúdo central.
Infelizmente, nem todos os sistemas de arquivos suportam clonagem. Recomendamos o uso de um sistema de arquivos copy-on-write (CoW) (por exemplo, Btrfs em vez de Ext4 no Linux) para obter a melhor experiência com pnpm.
modules-cache-max-age
- Padrão: 10080 (7 dias em minutos)
- Tipo: número
O tempo em minutos após o qual os pacotes órfãos do diretório de módulos devem ser removidos. pnpm mantém um cache de pacotes no diretório de módulos. Isso aumenta a velocidade de instalação ao alternar ou fazer downgrade de dependências.
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
- Padrão:
- Se a variável $PNPM_HOME existir, então $PNPM_HOME/store
- Se a variável $XDG_DATA_HOME existir, então $XDG_DATA_HOME/pnpm/store
- No Windows: ~/AppData/Local/pnpm/store
- No macOS: ~/Library/pnpm/store
- No Linux: ~/.local/share/pnpm/store
- Tipo: caminho
O local onde todos os pacotes são salvos no disco.
A store deve estar sempre no mesmo disco em que a instalação está acontecendo, para exista uma store por disco. Se houver um diretório home no disco atual, então a store será criado dentro dele. Se não houver algum diretório home no disco, a store será criada a partir da raiz do sistema de arquivos. Por exemplo, se a instalação está acontecendo em um sistema de arquivos montado em /mnt
, então a store será criada em /mnt/.pnpm-store
. O mesmo acontece para os sistemas windows.
É possível definir uma store a partir de um disco diferente, mas nesse caso o pnpm vai copiar os pacotes da store ao invés de fazer um hard-linking deles, pois hard links só são possíveis no mesmo sistema de arquivos.
verify-store-integrity
- Padrão: true
- Tipo: Boolean
By default, if a file in the store has been modified, the content of this file is checked before linking it to a project's node_modules
. If verify-store-integrity
is set to false
, files in the content-addressable store will not be checked during installation.
use-running-store-server
Deprecated feature
- Padrão: low
- Tipo: Boolean
Só permite a instalação com um servidor de armazenamento. Se nenhum servidor de armazenamento estiver em execução, a instalação falhará.
strict-store-pkg-content-check
- Valor padrão: false
- 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
.
Configurações do arquivo de bloqueio
lockfile
- Valor padrão: false
- Tipo: Boolean
When set to false
, pnpm won't read or generate a pnpm-lock.yaml
file.
prefer-frozen-lockfile
- Valor padrão: false
- 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
- Padrão: low
- Tipo: Boolean
Add the full URL to the package's tarball to every entry in pnpm-lock.yaml
.
git-branch-lockfile
- Padrão: low
- 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 exemplo:
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.
Configurações de Autenticação & Registro
registry
- Padrão: https://registry.npmjs.org/
- Tipo: url
A URL base do pacote no registro npm (barra no final incluída).