Resoluções seletivas de dependências

O Yarn oferece suporte a resoluções seletivas de versão, o que permite que você defina versões personalizadas de pacotes dentro de suas dependências através do campo resolutions no seu arquivo package.json. Normalmente, isso exigiria que você editasse manualmente o arquivo yarn.lock.

Por que fazer isso?

  • Você de repente pode estar dependendo de um pacote que não é atualizado com frequência, o qual, por sua vez, depende de outro pacote que tem uma atualização importante disponível. Nesse caso, se o intervalo de versão especificado pela sua dependência direta não cobrir a nova versão da subdependência, você estará à mercê do autor lançar uma nova atualização.

  • Uma subdependência do seu projeto recebeu uma atualização importante de segurança e você pode não querer esperar até suas dependências diretas lançarem uma atualização.

  • Você pode estar dependendo de um pacote sem manutenção porém funcional e uma de suas dependências recebeu uma atualização. Você sabe que a atualização seria compatível e não está com vontade de criar um fork do pacote dependido só para atualizar uma de suas dependências.

  • Sua dependência pode ter definido um amplo intervalo de versão e sua subdependência acabou de receber uma atualização problemática, fazendo você querer fixá-la a uma versão anterior.

Como posso usar isso?

Adicione um campo resolutions ao seu arquivo package.json e defina os pacotes e versões que você deseja sobrepor:

package.json

{
  "name": "projeto",
  "version": "1.0.0",
  "dependencies": {
    "left-pad": "1.0.0",
    "c": "file:../c-1",
    "d2": "file:../d2-1"
  },
  "resolutions": {
    "d2/left-pad": "1.1.1",
    "c/**/left-pad": "1.1.2"
  }
}

Em seguida, execute yarn install.

Dicas e macetes

  • Você receberá um aviso caso defina uma resolução inválida (um nome de pacote inválido, por exemplo)
  • Você receberá um aviso caso a versão ou intervalo da sua resolução seja inválido.
  • Você receberá um aviso caso a versão ou intervalo da sua resolução não seja compatível com o intervalo de versão original.

Limitações e ressalvas

  • Pacotes aninhados podem não funcionar corretamente.
  • Certos casos extremos podem não funcionar adequadamente já que esta é uma funcionalidade relativamente nova.