Yo uso TypeScript 2 en mi proyecto. Me gustaría usar algunas bibliotecas js, pero también tipificaciones para esa biblioteca. Puedo instalar tipos con simples npm install @types/some-library
. No estoy seguro si debería --save
o --save-dev
ellos. Me parece que incluso el archivo Léame de GitHub DefinetelyTyped menciona ambas versiones, pero nunca las explica. Creo que los @types deberían estar devDependencies
, ya que los tipos son necesarios para el desarrollo y no se usan en tiempo de ejecución, pero vi muchas veces @types solo dependencies
. Estoy confundido.
¿Cómo debo decidir si @ types / * entra dependencies
o devDependencies
? ¿Hay realmente algunas instrucciones más o menos oficiales?
dependencies
ydevDependencies
en el último caso.devDependencies
ydependencies
es irrelevante cuando se construye un paquete, es algo que también secreate-react-app
aplica , pero en última instancia depende de usted elegirRespuestas:
Digamos que está desarrollando un paquete "A" que tiene un paquete @ types / some-module en devDependencies. Por alguna razón, está exportando el tipo desde @ types / some-module
En este momento, los consumidores de TypeScript del paquete "A" no pueden adivinar qué es SomeType, ya que las dependencias dev del paquete "A" NO están instaladas.
En ese caso particular, NECESITA colocar el paquete @ types / * con "dependencias" regulares. Para otros casos, "devDependencies" son lo suficientemente buenas.
fuente
devDependencies
?dependencies
. DedevDependencies
lo contrario está biendependencies
hará que el árbol de dependencias se hinche.Si solo está generando un paquete, puede que no sea necesario hacer la distinción entre
dependencies
ydevDependencies
. Esta característicanpm
es generalmente útil cuando se publica un paquete que puede ser utilizado por otros y no desea enviarles correo no deseado con dependencias redundantes.Puede haber otros casos de uso en los que dividir dependencias puede ser útil, pero a menos que tenga una necesidad expresa de esto, entonces mi consejo es elegir uno y colocar todo allí. No es difícil dividirlos después si surge la necesidad.
Un ejemplo bien conocido de esta práctica IRL es que
create-react-app
, por defecto, la placa repelente no expulsada en la que crea coloca tododependencies
, vea este hilo y esta respuestafuente
devDependencies
no se instalan cuando lo hacenpm install --production
(onpm ci --production
) y, por lo tanto, no están disponibles al ejecutar el código de producción. Esta es una diferencia muy significativa para un servicio, no solo una biblioteca.En el caso particular de implementar una aplicación Node.js en producción, uno solo quiere instalar las dependencias necesarias para ejecutar la aplicación.
npm install --production
onpm ci --production
oyarn --production
En ese caso, los tipos deben estar en el
devDependencies
, para evitar que se hinche la instalación.Observación: Sé que esto fue mencionado en un comentario de Brad Wilson a otra respuesta. Sin embargo, este punto parece digno de ser una respuesta.
fuente