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

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

Ответы (3)

Допустим, вы разрабатываете пакет «A», который имеет пакет @ types / some-module в devDependencies. По какой-то причине вы экспортируете тип из @ types / some-module

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

     }
}

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

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

В частном случае развертывания приложения Node.js в производственной среде требуется установить только зависимости, необходимые для запуска приложения.

npm install --production или

npm ci --production или

пряжа - производство

В этом случае типы должны быть в devDependencies, чтобы они не раздували установку.

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

Если вы просто создаете пакет, возможно, нет необходимости делать различие между зависимостями и devDependencies. Эта функция npm обычно полезна при публикации пакета, который может использоваться другими, и вы не хотите спамить их избыточными зависимостями.

Могут быть и другие варианты использования, в которых расщепление зависимостей может быть полезным, но если у вас нет явной необходимости в этом, мой совет - просто выберите любой из них и поместите все туда. Их несложно потом разделить, если возникнет необходимость.

Хорошо известным примером этой практики является create-response-app, по умолчанию невыгруженный шаблон, который он создает, помещает все в зависимости, см. this нить и этот ответ

2022 WebDevInsider