В файле package.json
зависимости могут быть разделены на зависимости для продакшена (прод) и зависимости для разработки (дев). Это полезно, так как можно указать, какие пакеты необходимы только для разработки или тестирования, и они не попадут в итоговую сборку при развертывании на сервере. Это помогает сделать итоговый бандл более легким и эффективным.
В package.json
разделение выполняется с использованием ключевых слов dependencies
и devDependencies
.
1. dependencies
: В этом разделе указываются зависимости для продакшена, то есть пакеты, необходимые для работы приложения во время его реального использования. Например, это может быть фреймворк, библиотеки, модули и другие компоненты, которые необходимы для работы приложения на сервере или в браузере. Зависимости отмечаются, добавляя их имя и версию в этот раздел dependencies
.
2. devDependencies
: В этом разделе указываются зависимости для разработки, то есть пакеты, необходимые только во время разработки. Например, это могут быть инструменты сборки, дополнительные библиотеки или плагины для тестирования и отладки приложения. Зависимости отмечаются, добавляя их имя и версию в этот раздел devDependencies
.
Пример package.json
с разделением зависимостей на прод и дев:
{ "name": "my-app", "version": "1.0.0", "dependencies": { "express": "^4.17.1", "react": "^16.13.1", "react-dom": "^16.13.1" }, "devDependencies": { "babel-cli": "^6.26.0", "eslint": "^7.11.0", "webpack": "^5.0.0" } }
В приведенном примере, express
, react
и react-dom
являются зависимостями для продакшена (прод), а babel-cli
, eslint
и webpack
- зависимостями для разработки (дев).
Чтобы установить только зависимости для продакшена, можно использовать команду npm install --production
. Это установит только зависимости из раздела dependencies
в package.json
и пропустит установку зависимостей из раздела devDependencies
. Также, при публикации пакета на npm, зависимости из devDependencies
не будут установлены для тех, кто установит ваш пакет.
В целом, разделение зависимостей на dependencies
и devDependencies
в package.json
позволяет держать контроль над тем, какие пакеты необходимы только для разработки и тестирования, и какие пакеты требуются для работы приложения в продакшене. Это помогает уменьшить размер итогового бандла при развертывании, а также упрощает и ускоряет процесс установки зависимостей.