Конфигурация 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.

Также можно использовать символ вставки (^), чтобы 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 не добавляется в проект, но его можно найти в папке проекта.