Когда вы начинаете новый проект, вы можете создать файл package.json с помощью команды
npm init
Командная строка задаст вам несколько вопросов -- и новый файл package.json готов!
Для чего он нужен?
В этом файле указывается базовая информация о вашем проекте: название, версия, ссылка на репозиторий, информация об авторе. А ещё в нём указываются зависимости — библиотеки и модули, которые нужны вашему проекту для работы. Для них есть отдельный раздел "dependencies", который содержит название модуля и его версию.
Например, если в только что созданном проекте установить react и react-dom через команду
npm i react react-dom
то к содержимому вашего package.json добавится следующая структура:
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
}Кстати, в версии у этих пакетов содержится символ
^. Этот символ позволит npm обновить версию react и react-dom до более свежей минорной версии или патча, если в момент выполнения команды npm install или npm update у реакта уже будет новая версия.Если не хотите, чтобы npm что-то вам обновлял, можно указать фиксированную версию:
"react": "18.2.0". А ещё есть калькулятор версий, где можно проверить, какие версии пакета могут вам установиться, если вы укажете версию, например, "~16.8.3" или "18.x".Помимо dependencies
В package.json есть и другие способы работы с зависимостями вашего модуля:
peerDependencies — например, вы разрабатываете библиотеку, и хотите указать, что для её работы требуются определённая версия какого-то другого пакета. При этом напрямую этот пакет вы не используете, но ожидаете, что использовать его будет тот, кто вашу библиотеку установит. В этом случае вы можете указать у себя, например:
"peerDependencies": {
"webpack": ">=5.x",
}
Тогда, если я установлю себе вашу библиотеку, npm удостоверится, что у меня уже установлен вебпак 5 мажора и выше.bundleDependencies — те зависимости, которые npm упакует в архив вместе с вашим модулем при выполнении команды
npm pack.Ещё про версии зависимостей
Устанавливать зависимости можно не только через указание версий модуля в npm. Вместо версии можно указать, например, путь до модуля, который хранится у вас в какой-нибудь отдельной папке:
"dependencies": {
"myOtherProject": "file:../projects/myOtherProject"
}
Или ссылку репозиторий с вашим модулем (даже с указанием конкретной ветки в этом репозитории после символа # в конце):
"dependencies": {
"project": "git+ssh://git@github.com/blablabla/project.git#dev"
}
Или ссылку на скачивание архива с вашем модулем:
"dependencies": {
"remoteProject": "http://example.com/example.tar.gz"
},Ещё больше интересного про этот файл можно прочитать в документации.