Должен ли гибкий пакет быть зависимостью или зависимостью от развития?

#javascript #npm #dependency-management #svelte

Вопрос:

Я знаю, что уже есть много сообщений, касающихся различия между dependency и devDependency , но я не нашел ни одного, которое объясняло бы это для случая стройности, поэтому давайте откроем это здесь.

В большинстве пакетов svelte, таких как svelte-material-ui или svelte-routing, в руководстве по установке указано установить пакет как dependency . Однако, поскольку svelte скомпилирует этот пакет во время сборки, новой библиотеке, которая будет его использовать, не нужно устанавливать этот пакет svelte. Так что я не понимаю, почему это так, как должно быть dependency .

Возможно, этот вопрос основан на мнении, но было бы неплохо иметь хотя бы небольшое представление о том, что использовать.

Ответ №1:

В SvelteKit (следующая версия Сапера) есть одно существенное различие между dependency и devDependency : любой модуль, используемый в конечной точке (на стороне сервера), должен быть a dependency . В противном случае проект может не работать при развертывании на бессерверной платформе, хотя он будет работать локально.

В противном случае я предпочитаю хранить все как есть devDependency . Я думаю, что это имеет смысл, потому что Svelte-это компилятор, а пакеты нужны только во время компиляции. Однако я не думаю, что было бы вредно просто представить все как dependency .

Комментарии:

1. Источник для этого был бы хорош. Не то чтобы я в этом сомневался, просто хочу узнать больше

2. @BrunoEly: Эта проблема часто возникает в чате SvelteKit discord. Также это имеет смысл, если вы подумаете о том, как работают бессерверные функции.

Ответ №2:

Я считаю, что это личное мнение. Если вы не распространяете свой код как пакет NPM, различие должно быть минимальным. См., Например, Это связанное обсуждение.

По моему опыту работы с веб-проектами полезно различать зависимости, которые используются для создания/тестирования (зависимости от разработчиков), и зависимости, которые «используются во время выполнения» (зависимости). Вы правы в том, что при использовании Svelte ни один буквальный код не используется во время выполнения, но тогда все будет зависеть от разработки, поэтому вы не получите полезного разделения.

В документации NPM говорится, что различие должно заключаться в производстве и разработке/тестировании.