# Зачем нужен package.json

03:50
poster
В этом уроке мы с вами разберем, зачем нужен package.json, когда вы используете в проекте npm пакеты. Это достаточно базовый вопрос, который до сих пор не все знают, но знать его нужно обязательно.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

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

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Aleksandr Polyakh
1год назад назад
Доброе время суток, скажите пожалуйста есть смысл, использовать ReactJS с pug(jade), если да скиньте пожалуйста ссылку на модуль, для интеграции webpack 2. Спасибо
monsterlessons
1год назад назад
Добрый день. Смысла нет абсолютно, потому что в ReactJS пишется jsx и там не нужен отдельный шаблонизатор.
Aleksandr Polyakh
1год назад назад
Спасибо вам, скажите пожалуйста, что думает по поводу вот этой книги 'Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих' https://www.ozon.ru/context/detail/id/139296295/, работаю джуниором, ReactJS/Redux. Или лучше продолжать изучать книги по JS 'Секреты JavaScript ниндзя'. Опыта чуть больше года, по образованию юрист. Спасибо
monsterlessons
1год назад назад
Исходя из моего опыта, алгоритмы применяются крайне редко и я бы на них не акцентировал внимание при обучении. Лучше углублять знания js и делать реальные проекты. Я вообще не фанат изучения по книгам. Намного лучше приобретать знания решая проблемы.
Rider. ok
1год назад назад
А как пакет попал в package.json, если не было флага --save (--save-dev) При npm i express мы просто устанавливаем пакет без записи в package.js, разве не так?
monsterlessons
1год назад назад
В npm5, который устанавливается с node 8 даже без указания --save пакет автоматически попадает в package.json в раздел dependencies.
Rider. ok
1год назад назад
круто, спасибо, не знал
Андрей Фролов
1год назад назад
Здравствуйте! В чем разница между Dependencies и DevDependencies? И что это за символы ставятся перед цифрами, указывающими версию пакета?
monsterlessons
1год назад назад
Добрый день. Dependencies - это зависимости вашего проекта в любом окружении (development, test, production). Devdependencies - это зависимости в development/test окружении. Это разделение нужно для того, чтобы иметь возможность в продакшене не устанавливать пакеты, которые нужны вам только для девелопмента. Например, пакеты для тестирования. Про версии пакетов и символы перед версиями я расскажу в следующем видео. Если вкратце, то это указание, до какой версии можно обновлять. Например, можно указать, что мы разрешаем обновлять у пакета только минорную версию.