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. Assim, há diferentes tipos de dependências que você pode ter (por exemplo, dependencies, devDependencies e peerDependencies).

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

{
  "name": "my-project",
  "dependencies": {
    "package-a": "^1.0.0"
  },
  "devDependencies": {
    "package-b": "^1.2.1"
  },
  "peerDependencies": {
    "package-c": "^2.5.4"
  },
  "optionalDependencies": {
    "package-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 quando executar seu código (por exemplo, React ou ImmutableJS).

devDependecies

Estas são as dependências do seu desenvolvimento. Dependências que você precisa em algum momento do workflow de desenvolvimento, mas não quando executa seu código (por exemplo, Babel ou Flow).

peerDependencies

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

Ter uma dependência do mesmo nível significa que seu pacote precisa de uma dependência que é exatamente a mesma dependência que uma pessoa que está instalando seu pacote vai precisar ter. Isso é útil para pacotes como react que precisa ter uma única cópia de react-dom que é também usado pela pessoa que instalá-lo.

optionalDependencies

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

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

bundledDependencies

Array de nomes de pacotes que serão empacotados na publicação do pacote.

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

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

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