Настройка package.json: dependencies или devDependencies?
Всем привет.
Вопрос, не дающий мне покоя уже довольно продолжительное время. Решал его для себя до сих пор в основном по наитию, но пора бы уже и разобраться.
Суть вот в чём. Допустим, есть у меня проект, который собирается силами webpack'а, в нём используется группа babel'овских пакетов (core, polyfill, preset), плагины к самому webpack'у, в том числе bundle-analyzer. Многие маны пишут, что webpack нужно вносить в devDependencies: мол, сборка к production'у отношения не имеет, это development. В моём же понимании, к development'у тут относится только bundle-analyzer, который используется только в процессе разработки, а вот webpack должен быть в dependencies, потому что иначе я не смогу собрать prod-сборку, предварительно установив зависимости, например, командой yarn install --prod
(в моём случае сборка происходит на стороне gitlab-ci).
Собственно, просьба к знатокам: помогите расставить в голове все точки над i и окончательно разобраться, когда пакет должен включаться в dependencies, а когда в devDependencies.
dependencies это зависимости проекта, то без чего он не будет работать. в devdeps лежат пакеты необхдимые для разработки проекта, webpack в данном случае devDep, а babel-polyfill - dep.
я не смогу собрать prod-сборку
вы употребили слово сборка, а сборка это один из этапов разработки
хотя на самом деле в случае создания сайта или вебапп, это деление вообще бесмысленно и носит чисто семантический характер для разработчика, не технический. т.е. т.к. в готовом коде у вас уже включены все библиотеки, фреймворки, css-киты (кстасти все они лежат в dependencies), то их нет смысла устанавливать(браузер не может получить доступ к packacje.json и узнать что там dependencies зависимосит, а что нет). а вот если вы делает какой-нибудь npm пакет который будет выполняться в node-окружении, там это деление имеет ключевую роль, т.к.там пакеты подключаются через require() и если вы не установите зависимость из dependencies этого проекта, то он не будет работать.
а вообще вопрос уже много раз обсасывался и здесь, и в гугле
Alex, спасибо за ответ.
Мой случай -- это как раз webapp. Но для меня деление имеет значение, так как на стороне gitlab-ci каждый раз с нуля собираются все зависимости. Чем их больше, тем дольше идёт деплой. Часть пакетов нужна именно для разработки (как упомянутый выше bundle-analyzer). Но правильно ли я понимаю, что в моём случае webpack и всё, что нужно для prod-сборки -- это именно dep, а не devDep?
Я понимаю, что тут по большей части семантика, но реально хочется разобраться до конца. Суть вопроса для разработчиков npm-пакетов я уже понял.