
В этом уроке мы с вами разберем, зачем нужен package.json, когда вы используете в проекте npm пакеты. Это достаточно базовый вопрос, который до сих пор не все знают, но знать его нужно обязательно.
Какое же его основное назначение? Представим ситуацию, когда мы разрабатываем проект, и установили несколько npm пакетов. Они лежат у нас в проекте в папке node_modules. У нас на машине все работает, но рано или поздно нам необходимо запустить проект на другой машине, либо дать другому разработчику. И мы пушим проект в git, но папку node_modules в git мы не заливаем, так как она большая и занимает много места. И на другой машине невозможно запустить проект, так как неизвестно какие пакеты из node мы использовали.
Для этого нам и нужен package.json. Он хранит список пакетов, необходимых для проекта с нужными версиями, и на другой машине мы можем легко установить все пакеты, которые указаны там с помощью команды
npm install
Давайте попробуем.
Итак у меня установлена node 8.5.0. И начиная создавать любой проект, в котором нам понадобятся node модули, нам понадобится package.json.
Если мы напишем в консоли
npm init
то это запустит процесс создания файла package.json. Мы можем просто понажиматься enter и файл создастся.
Если мы его откроем, то там указаны базовые данные: название проекта, автор версия и так далее. На данный момент нам это мало интересно.
Главное, что теперь устанавливая пакет он автоматически добавится в package.json.
Давайте установим например пакет express.
npm install express
Если мы посмотрим в package.json, то у нас появилась секция dependencies и там express последней версии. Также в node_modules у нас установился express и все его зависимости.
Теперь давайте установим парочку других пакетов, который нам могли бы понадобиться.
npm i ramda
npm i winston
Обратите внимание, что вы можете использовать i, вместо install, чтобы писать меньше.
Если мы посмотрим в package.json, то там появились наши пакеты.
Теперь представим, что мы склонировали наш проект из гита и в нем нет папки node_modules. Давайте удалим ее сейчас. Теперь для того, чтобы установить правильные пакеты нам достаточно написать
npm install
и все пакеты установятся, соответственно версиям в package.json.
Также, не забывайте всегда добавлять папку node_modules в gitignore, когда пушите в git. Зачем это нужно?
Во первых, папка может весить гигабайты, а значит pull и push будут очень долго выполнятся. Во вторых, если кто-то добавляет или удаляет пакет, то будет менятся все дерево зависимостей и это все будет попадать в коммит и пулл реквест, тем самым усложняя понимание что происходит.