Eu uso o TypeScript 2 no meu projeto. Gostaria de usar alguma biblioteca js, mas também digitações para essa biblioteca. Eu posso instalar tipos com simples npm install @types/some-library
. Não tenho certeza se devo --save
ou --save-dev
eles. Parece-me que mesmo o readme do DefinitelyTyped GitHub menciona as duas versões, mas nunca as explica. Eu acho que o @types deve estar dentro devDependencies
, pois os tipos são necessários para o desenvolvimento e não são usados em tempo de execução, mas eu vi muitas vezes o @types apenas dependencies
. Estou confuso.
Como devo decidir se @ types / * entra dependencies
ou devDependencies
? Na verdade, existem instruções mais ou menos oficiais?
dependencies
edevDependencies
no último caso.devDependencies
edependencies
é irrelevante quando a construção de um pacote, é algo quecreate-react-app
Enforces bem , mas em última análise, cabe a você escolherRespostas:
Digamos que você esteja desenvolvendo um pacote "A" que tenha o pacote @ types / some-module em devDependencies. Por algum motivo, você está exportando o tipo de @ types / some-module
No momento, os consumidores de texto datilografado do pacote "A" não conseguem adivinhar o que é SomeType, pois as devDependencies do pacote "A" NÃO estão instaladas.
Nesse caso específico, você PRECISA colocar @ types / * package com "dependências" regulares. Para outros casos, as "devDependencies" são boas o suficiente.
fonte
devDependencies
?dependencies
. Caso contrário, tudodevDependencies
bemdependencies
fará com que a árvore de dependência fique inchada.Se você está apenas gerando um pacote, pode não haver necessidade de fazer a distinção entre
dependencies
edevDependencies
. Esse recursonpm
geralmente é útil ao publicar um pacote que pode ser usado por outras pessoas e você não deseja enviá-las por spam com dependências redundantes.Pode haver outros casos de uso em que a dependência de divisão pode ser útil, mas, a menos que você tenha uma necessidade expressa disso, meu conselho é escolher apenas uma e colocar tudo lá. Não é difícil separá-los posteriormente, se necessário.
Um exemplo bem conhecido dessa prática IRL é
create-react-app
, por padrão, o clichê não ejetado que ele cria coloca tudodependencies
, consulte esta discussão e esta respostafonte
devDependencies
não são instalados quando você faznpm install --production
(ounpm ci --production
) e, portanto, não estão disponíveis ao executar o código de produção. Essa é uma diferença muito significativa para um serviço, não apenas para uma biblioteca.No caso específico de implantar um aplicativo Node.js. na produção, é necessário instalar apenas as dependências necessárias para executar o aplicativo.
npm install --production
ounpm ci --production
ouyarn --production
Nesse caso, os tipos devem estar no
devDependencies
, para impedir que inchem a instalação.Observação: sei que isso foi mencionado em um comentário de Brad Wilson para outra resposta. Este ponto parece digno de ser uma resposta, no entanto.
fonte