Как я могу решить, будут ли @types/* переходить в `dependencies` или` devDependencies`?

Я использую TypeScript 2 в своем проекте. Я хотел бы использовать некоторую библиотеку js, но также типизацию для этой библиотеки. Я могу установить типы с простым npm install @types/some-library. Я не уверен, должен ли я --save или --save-dev их. Мне кажется, что даже DefinetelyTyped GitHub readme вроде упоминает обе версии, но не объясняет их. Я думаю, что @types должен находиться в devDependencies, так как типы необходимы для разработки и не используются во время выполнения, но я видел много раз @types только в dependencies. Я в замешательстве.

Как мне решить, будут ли @types/* переходить в dependencies или devDependencies? Существуют ли на самом деле некоторые более или менее официальные инструкции?

Ответ 1

Предположим, вы разрабатываете пакет "A" , у которого есть @types/some-module package в devDependencies. По какой-то причине вы экспортируете тип из @types/some-module

import {SomeType} from 'some-module';
export default class APackageClass {
     constructor(private config: SomeType) {

     }
}

В настоящее время Typescript потребители пакета "A" не могут угадать, что такое SomeType, поскольку devDependencies пакета "A" НЕ установлены.

В этом конкретном случае вам НЕОБХОДИМО разместить пакет @types/* с регулярными "зависимостями". Для других случаев "devDependencies" достаточно хороши.

Ответ 2

Вы генерируете связку? Если это так, я бы посоветовал не тратить слишком много времени на обсуждение того, что и где. devDependencies и dependencies имеют смысл только в том случае, если вы публикуете пакет, который может использоваться другими, и вы не хотите рассылать им нежелательные зависимости.

Поместите это в devDependencies. Как вы сказали, "типы необходимы для разработки и не используются во время выполнения".

Ответ 3

В конкретном случае развертывания приложения Node.js в рабочей среде требуется установить только те зависимости, которые необходимы для запуска приложения. (С помощью npm install --production или npm ci --production или yarn production.) В этом случае типы должны быть в devDependencies, чтобы они не вздулись при установке.

Примечание: я знаю, что это было упомянуто в комментарии Брэда Уилсона к другому ответу. Этот момент кажется достойным ответа, хотя.