#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 говорится, что различие должно заключаться в производстве и разработке/тестировании.