конфигурация package.json

Если вы разрабатываете приложение на Node.js с большим количеством пакетов npm, это не редкость сталкиваться с предупреждениями или ошибками при сборке проекта, если один или несколько пакетов были обновлены. Иногда происходит конфликт версий, или версия пакета была объявлена устаревшей. Ниже приведены несколько кратких советов, которые помогут вам настроить файлpackage.json и понять, что происходит при появлении предупреждений или ошибок. Это не полное руководство по package.json и ориентировано только на управление версиями пакетов npm.

Система управления версиями пакетов npm имеет строгие правила. Ниже приведен формат версии:

[major].[minor].[patch]

Предположим, у вас есть пакет в приложении с версией 5.2.1. Основная версия — 5, дополнительная версия — 2, а исправление — 1.

  • В обновлении основной версии пакет включает новые функции, которые являются несовместимыми с предыдущими версиями, то есть изменения, нарушающие совместимость.
  • В минорном обновлении версии новые функции были добавлены в пакет, которые совместимы с более ранними версиями пакета.
  • В обновлении исправлений включены одно или несколько исправлений ошибок. Исправления ошибок всегда сохраняют обратную совместимость.

Стоит отметить, что некоторые функции пакета npm имеют зависимости. Например, чтобы использовать новую функцию пакета компилятора TypeScript (ts-loader) с webpack, можно также обновить пакет npm webpack и пакет webpack-cli.

Для управления версиями пакетов npm поддерживает несколько нотации, которые можно использовать в package.json. Эти нотации можно использовать для управления типом обновлений пакетов, которые вы хотите принять в приложении.

Предположим, вы используете React и должны подключить npm-пакеты react и react-dom. В вашем файле package.json можно указать это несколькими способами. Например, можно указать точную версию пакета следующим образом.

"dependencies": {
  "react": "16.4.2",
  "react-dom": "16.4.2",
},

При использовании предыдущей нотации npm всегда получает точную версию, указанную 16.4.2.

Вы можете использовать специальную нотацию для ограничения обновлений исправлений (исправлений ошибок). В этом примере:

"dependencies": {
  "react": "~16.4.2",
  "react-dom": "~16.4.2",
},

Вы используете символ тильды (~), чтобы указать npm обновлять пакет только при выпуске патча. Таким образом, npm может обновить react 16.4.2 до 16.4.3 (или 16.4.4 и т. д.), но не будет обновлять основную или второстепенную версию. Таким образом, 16.4.2 не будет обновлено до 16.5.0.

Вы также можете использовать символ caret (^), чтобы указать, что npm может обновить дополнительный номер версии.

"dependencies": {
  "react": "^16.4.2",
  "react-dom": "^16.4.2",
},

С помощью этой нотации npm может обновить react 16.4.2 до 16.5.0 (или 16.5.1, 16.6.0 и т. д.), но он не примет обновление до основной версии. Таким образом, 16.4.2 не будет обновлено до 17.0.0.

При обновлении пакетов npm создается файл package-lock.json , который перечисляет фактические версии пакетов npm, используемые в приложении, включая все вложенные пакеты. Хотя package.json управляет прямыми зависимостями для приложения, он не управляет вложенными зависимостями (другие пакеты npm, необходимые для конкретного пакета npm). Вы можете использовать файлpackage-lock.json в цикле разработки, если необходимо убедиться, что другие разработчики и тестировщики используют точные пакеты, которые вы используете, включая вложенные пакеты. Дополнительные сведения см. в package-lock.json документации по npm.

Для Visual Studio файл package-lock.json не добавляется в проект, но его можно найти в папке проекта.