1. Что такое package.json и зачем он нужен
Если бы проекты на Node.js были людьми, то package.json был бы их паспортом, резюме и списком контактов одновременно. Это главный файл любого npm-проекта, в котором хранится информация о проекте, его зависимостях, скриптах и многом другом.
Когда вы открываете любой проект на Node.js, первым делом ищите package.json — именно здесь описано всё самое важное: как этот проект называется, какая у него версия, какие пакеты он использует, какие команды можно запускать и даже кто его автор.
Для чего нужен package.json?
- Описывает проект: имя, версию, описание и прочие метаданные.
- Хранит список зависимостей — тех самых библиотек, без которых проект работать не будет.
- Позволяет запускать скрипты через npm run (например, npm run start).
- Определяет, какие файлы входят в пакет при публикации.
- Позволяет другим разработчикам быстро развернуть проект: достаточно скачать код и выполнить одну команду — npm install.
Без package.json ваш проект — как чемодан без ручки: вроде и есть, но пользоваться неудобно.
2. Как создать package.json — вручную и автоматически
Вариант 1: вручную (не рекомендуем, но вдруг)
Можно создать файл package.json руками и написать в нём что-то вроде:
{
"name": "my-awesome-project",
"version": "1.0.0"
}
Но это примерно как вручную писать HTML-документ без редактора — скучно и легко ошибиться. К тому же, вы рискуете забыть важные поля или допустить опечатку.
Вариант 2: автоматически — команда npm init
Правильный путь современного разработчика — использовать npm!
Откройте терминал в папке вашего проекта и выполните:
npm init
Вас спросят про имя проекта, версию, описание, точку входа (обычно index.js), команду для тестирования, репозиторий, ключевые слова, автора и лицензию. После этого будет создан полноценный package.json.
Если вы не любите долгие опросы, есть команда для "ленивых":
npm init -y
Флаг -y (или --yes) автоматически отвечает на все вопросы стандартными значениями. В результате вы сразу получите рабочий package.json — его всегда можно отредактировать позже.
Пример результата
{
"name": "my-awesome-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
3. Основные поля package.json: что значат и зачем нужны
Давайте разберёмся, что означают все эти загадочные поля и зачем они нужны.
| Поле | Описание | Пример |
|---|---|---|
|
Имя вашего проекта или пакета (только маленькие буквы, без пробелов) | |
|
Версия проекта (семантическая: major.minor.patch) | |
|
Краткое описание | |
|
Главный файл (точка входа для require/import) | |
|
Набор команд (скриптов), которые можно запускать через npm run | см. ниже |
|
Ключевые слова для поиска | |
|
Автор проекта | |
|
Лицензия проекта | |
|
Список зависимостей, нужных для работы | см. ниже |
|
Зависимости только для разработки (тесты, линтеры и т.д.) | см. ниже |
|
Ссылка на репозиторий (GitHub и т.д.) | см. ниже |
Скрипты (scripts)
Это то, что превращает ваш проект из "кучи файлов" в "настоящий проект". Здесь можно прописать команды, которые потом удобно запускать.
"scripts": {
"start": "node index.js",
"test": "echo \"No tests yet!\""
}
Теперь можно запускать:
npm run start
npm run test
(Если скрипт называется start или test, можно даже писать просто npm start или npm test.)
Зависимости (dependencies и devDependencies)
- dependencies — библиотеки, которые нужны для работы вашего приложения (например, express, react, lodash).
- devDependencies — нужны только для разработки (например, eslint, prettier, nodemon).
После установки зависимостей они появляются в соответствующем разделе. Подробнее — чуть позже.
Пример полного package.json
{
"name": "todo-app",
"version": "1.0.0",
"description": "Простое приложение для списка дел",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Нет тестов!\""
},
"keywords": ["todo", "tasks", "nodejs"],
"author": "Иван Иванов",
"license": "MIT",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^2.0.22"
}
}
4. Добавление и установка зависимостей: npm install
Как добавить новую зависимость
Допустим, вы хотите использовать фреймворк Express. Просто выполните:
npm install express
Что произойдёт:
- В папке появится папка node_modules (если её не было).
- В package.json появится раздел "dependencies", если его не было.
- В файл package-lock.json запишется точная версия установленного пакета (об этом позже).
- Express будет добавлен в проект, и вы сможете его использовать.
Установка зависимостей только для разработки
Некоторые пакеты нужны только для разработки (например, nodemon для автоматического перезапуска сервера):
npm install --save-dev nodemon
или коротко:
npm i -D nodemon
Теперь nodemon попадёт в раздел "devDependencies".
Установка всех зависимостей
Если вы скачали чужой проект с GitHub, не нужно вручную устанавливать каждый пакет. Просто выполните:
npm install
npm посмотрит на ваш package.json и установит всё, что там указано.
5. Практика: создаём свой package.json и устанавливаем зависимости
Давайте вместе создадим мини-проект и добавим в него зависимости.
- Создаём папку проекта
mkdir my-first-node-app cd my-first-node-app - Инициализируем npm
npm init -yПоявился package.json — отлично!
- Устанавливаем Express
npm install expressВ package.json появился раздел "dependencies", а в папке проекта — папка node_modules (не пугайтесь, она может быть ОГРОМНОЙ — это нормально).
- Устанавливаем nodemon для разработки
npm install --save-dev nodemonТеперь и "devDependencies" заполнен.
- Добавляем скрипты
Откройте package.json в редакторе и добавьте:
"scripts": { "start": "node index.js", "dev": "nodemon index.js" }Теперь можно запускать сервер в режиме разработки так:
npm run dev
6. Полезные нюансы
package-lock.json — что это и зачем нужен
После первой установки зависимостей у вас появится ещё один файл: package-lock.json. Это как "замок" на вашей коробке с инструментами — он фиксирует точные версии всех установленных пакетов и их зависимостей, чтобы у всех разработчиков проект работал одинаково.
- Не редактируйте этот файл вручную.
- Не добавляйте его в .gitignore (если только вы не любите хаос и неожиданные баги).
Как устроена установка пакетов: node_modules, зависимости, версии
- Все пакеты физически устанавливаются в папку node_modules.
- В package.json указывается только "основная" версия (например, "^4.18.2"), а в package-lock.json — точная версия (например, "4.18.2").
- Если удалить папку node_modules, достаточно снова выполнить npm install — всё восстановится.
8. Типичные ошибки при работе с package.json и npm
Ошибка №1: Редактирование node_modules вручную.
Не надо! Это папка для npm, а не для человека. Все изменения тут исчезнут после следующей установки зависимостей.
Ошибка №2: Случайное удаление package.json.
Если вы потеряете этот файл, проект перестанет быть проектом. Восстановить его вручную — мучительно.
Ошибка №3: Забыли добавить зависимость через npm, а просто скопировали строчку в package.json.
Так делать нельзя — нужно всегда использовать npm install. Просто прописать "express": "^4.18.2" — этого мало, нужно чтобы пакет реально скачался.
Ошибка №4: Не обновляете зависимости.
Иногда стоит выполнять npm outdated и npm update, чтобы не остаться на древних версиях библиотек.
Ошибка №5: Не добавили package-lock.json в git.
Это может привести к "работает у меня, а у тебя — нет". Всегда коммитьте этот файл!
Ошибка №6: Конфликт имён или опечатки в package.json.
Имя пакета должно быть уникальным и не содержать пробелов или заглавных букв. Например, my app — не подойдёт, а вот my-app — отлично.
Ошибка №7: Смешивание зависимостей для продакшена и разработки.
Не ставьте линтеры, тестовые библиотеки и прочее в обычные зависимости — используйте --save-dev.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ