Tipos de dependências

As dependências servem muitos propósitos diferentes. Algumas dependências são necessárias para construir seu projeto, outras são necessárias ao executar seu programa. Por isso, existem diferentes tipos de dependências que você pode ter (por exemplo, dependências normais (dependencies), dependências de desenvolvimento (devDependencies) e dependências de mesmo nível (peerDependencies)).

Seu arquivo package.json conterá todas essas dependências:

{
  "name": "meu-projeto",
  "dependencies": {
    "pacote-a": "^1.0.0"
  },
  "devDependencies": {
    "pacote-b": "^1.2.1"
  },
  "peerDependencies": {
    "pacote-c": "^2.5.4"
  },
  "optionalDependencies": {
    "pacote-d": "^3.1.0"
  }
}

A maioria das pessoas só tem dependencies e devDependecies, mas é importante entender cada um destes tipos.

dependencies

Essas são suas dependências normais, ou melhor, as que você precisa na hora de executar seu código (por exemplo, React ou ImmutableJS).

devDependecies

Estas são as suas dependências de desenvolvimento. Dependências que você precisa em algum momento do seu processo de desenvolvimento, mas que são desnecessárias na hora de apenas rodar seu código (por exemplo, Babel ou Flow).

peerDependencies

Dependências de mesmo nível são um tipo especial de dependência necessário somente se você estiver publicando seu próprio pacote.

Ter uma dependência de mesmo nível significa que seu pacote precisa de uma dependência que é exatamente a mesma que a pessoa que está instalando seu pacote vai precisar ter. Digamos que eu seja um usuário instalando o seu pacote: para que o seu pacote possa funcionar no meu projeto, eu também tenho que ter entre as dependências do meu projeto essa mesma peerDependency. Isso é útil para pacotes como os plugins do gulp - como os usuários já vão usar o Gulp diretamente, adicioná-lo como uma peerDependency evita que outras versões desse mesmo pacote sejam baixadas ao mesmo tempo, o que também evita problemas mais graves, como conflitos entre versões diferentes.

optionalDependencies

Dependências opcionais são apenas isso: opcionais. Se a instalação delas falhar, o Yarn ainda vai dizer que o processo de instalação foi bem sucedido.

Isso é útil para dependências que não necessariamente funcionarão em todas as máquinas e você tem um plano B caso elas não sejam instaladas (por exemplo, Watchman).

bundledDependencies

Um array dos nomes dos pacotes que serão empacotados na publicação do pacote.

Dependências agrupadas devem estar dentro do seu projeto. Funcionam basicamente da mesma maneira que as dependências normais. Elas também serão empacotadas quando yarn pack for executado.

Dependências normais geralmente são instaladas a partir do registro npm. Dependências agrupadas são úteis em casos onde dependências normais não são o suficiente:

  • Quando você quiser reutilizar uma biblioteca de terceiros que não vem do registro npm ou que foi modificada.
  • Quando quiser reutilizar seus próprios projetos como módulos.
  • Quando você quiser distribuir alguns arquivos junto com seu módulo.