J'utilise TypeScript 2 dans mon projet. Je voudrais utiliser une bibliothèque js, mais aussi des typages pour cette bibliothèque. Je peux installer des types avec simple npm install @types/some-library
. Je ne sais pas si je devrais --save
ou --save-dev
eux. Il me semble que même le fichier readme de DefinetelyTyped GitHub mentionne les deux versions, mais ne les explique jamais. Je pense que @types devrait être dans devDependencies
, car les types sont nécessaires pour le développement et ne sont pas utilisés dans le runtime, mais j'ai vu plusieurs fois @types juste dependencies
. Je suis confus.
Comment dois-je décider si @ types / * entre dependencies
ou devDependencies
? Existe-t-il en fait des instructions plus ou moins officielles?
dependencies
etdevDependencies
dans ce dernier cas.devDependencies
etdependencies
n'est pas pertinente lors de la construction d'un bundle, c'est quelque chose quicreate-react-app
s'applique aussi mais finalement c'est à vous de choisirRéponses:
Supposons que vous développiez un package "A" contenant le package @ types / some-module dans devDependencies. Pour une raison quelconque, vous exportez le type depuis @ types / some-module
import {SomeType} from 'some-module'; export default class APackageClass { constructor(private config: SomeType) { } }
Pour le moment, les consommateurs Typescript du paquet "A" ne peuvent pas deviner ce qu'est SomeType, puisque devDependencies du paquet "A" ne sont PAS installés.
Dans ce cas particulier, vous DEVEZ placer le package @ types / * avec des "dépendances" régulières. Pour les autres cas, "devDependencies" est suffisant.
la source
devDependencies
?dependencies
. Sinon,devDependencies
c'est biendependencies
rendra l'arborescence des dépendances gonflée.Si vous ne faites que générer un bundle, il n'est peut-être pas nécessaire de faire la distinction entre
dependencies
etdevDependencies
. Cette fonctionnalité denpm
est généralement utile lors de la publication d'un package qui peut être utilisé par d'autres et vous ne voulez pas les spammer avec des dépendances redondantes.Il peut y avoir d'autres cas d'utilisation où le fractionnement des dépendances peut être utile, mais à moins que vous n'en ayez un besoin express, mon conseil est de choisir l'un ou l'autre et de tout y placer. Il n'est pas difficile de les diviser par la suite si le besoin s'en fait sentir.
Un exemple bien connu de cette pratique IRL est
create-react-app
, par défaut, le passe-partout non éjecté dans lequel il crée place toutdependencies
, voir ce fil et cette réponsela source
devDependencies
ne sont pas installés lorsque vous le faitesnpm install --production
(ounpm ci --production
) et ne sont donc pas disponibles lors de l'exécution du code de production. C'est une différence très significative pour un service, pas seulement pour une bibliothèque.Dans le cas particulier du déploiement d'une application Node.js en production, on souhaite installer uniquement les dépendances nécessaires à l'exécution de l'application.
npm install --production
ounpm ci --production
ouyarn --production
Dans ce cas, les types doivent être dans le
devDependencies
, pour les empêcher de gonfler l'installation.Remarque: je sais que cela a été mentionné dans un commentaire de Brad Wilson à une autre réponse. Ce point semble toutefois digne d'être une réponse.
la source