Как я могу решить, будут ли @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
, чтобы они не вздулись при установке.
Примечание: я знаю, что это было упомянуто в комментарии Брэда Уилсона к другому ответу. Этот момент кажется достойным ответа, хотя.