Как правильно разделить зависимости на прод и дев в package.json?

В файле 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 позволяет держать контроль над тем, какие пакеты необходимы только для разработки и тестирования, и какие пакеты требуются для работы приложения в продакшене. Это помогает уменьшить размер итогового бандла при развертывании, а также упрощает и ускоряет процесс установки зависимостей.