Ошибка npm ERR! JSON.parse при установке пакетов почти всегда означает, что файл package.json был отредактирован вручную с нарушением синтаксиса — лишняя запятая, незакрытая кавычка или скобка ломают весь проект. Этот файл является сердцем любого Node.js-проекта: в нём описаны зависимости, скрипты запуска и метаданные приложения.
В этом руководстве разберём, как безопасно редактировать package.json вручную и через команды npm, какие поля за что отвечают и как проверить файл на ошибки перед запуском. Материал подходит и тем, кто только начал работать с Node.js, и тем, кто хочет систематизировать знания.
Что такое package.json и где он находится
Файл package.json лежит в корневой папке проекта и создаётся автоматически при выполнении команды npm init. Это обычный текстовый файл в формате JSON, который можно открыть любым редактором — от Блокнота до VS Code.
Внутри хранятся ключевые сведения о проекте:
- 📦 name и version — имя и версия пакета;
- 🔧 scripts — команды для запуска, сборки и тестирования;
- 📚 dependencies — библиотеки, нужные для работы приложения;
- 🛠️ devDependencies — инструменты разработки, не попадающие в продакшен.
Рядом обычно находится файл package-lock.json — его npm генерирует сам, и редактировать его вручную не нужно: он фиксирует точные версии установленных пакетов.
Как открыть и отредактировать файл вручную
Самый простой способ изменить package.json — открыть его в редакторе кода. Подойдёт VS Code, Sublime Text или любой другой редактор с подсветкой синтаксиса JSON. Подсветка помогает сразу заметить ошибку: неверный фрагмент обычно меняет цвет.
Порядок действий несложный. Откройте папку проекта в редакторе, найдите файл в корне, внесите изменения и сохраните через Ctrl+S. После этого выполните в терминале команду ниже, чтобы npm подтянул новые зависимости:
npm install
⚠️ Внимание: JSON не прощает лишних запятых. Запятая после последнего элемента объекта или массива — самая частая причина ошибки парсинга. Перед сохранением проверьте, что каждая запятая разделяет два элемента, а не стоит в конце списка.
☑️ Проверка package.json перед сохранением
Изменение файла через команды npm
Ручное редактирование — не единственный путь. Многие изменения безопаснее вносить командами: npm сам обновит файл и гарантированно сохранит корректный синтаксис. Так вы исключаете человеческий фактор.
Основные команды, которые меняют содержимое package.json:
npm install имя-пакета
npm install имя-пакета --save-dev
npm uninstall имя-пакета
npm pkg set description="Мой проект"
Команда npm pkg set позволяет менять отдельные поля без открытия файла — например, версию, описание или скрипты. Это удобно в скриптах автоматизации, где ручное редактирование невозможно.
Основные поля и их назначение
Чтобы правильно менять файл, нужно понимать, за что отвечает каждое поле. Ниже — сводная таблица ключевых секций.
| Поле | Назначение | Пример значения |
|---|---|---|
name | Имя пакета | "my-app" |
version | Версия по SemVer | "1.2.0" |
scripts | Команды запуска | "start": "node index.js" |
dependencies | Рабочие зависимости | "express": "^4.18.0" |
devDependencies | Инструменты разработки | "eslint": "^8.0.0" |
Обратите внимание на символы ^ и ~ перед версиями. Первый разрешает обновления минорной версии и патчей, второй — только патчей. Если нужна строго фиксированная версия, укажите её без префиксов.
Как изменить скрипты запуска
Секция scripts — одна из самых редактируемых. Именно здесь определяется, что произойдёт при выполнении npm start или npm run build. Добавить новый скрипт можно вручную, дописав строку в объект scripts:
"scripts": {
"start": "node index.js",
"dev": "node --watch index.js"
}
После сохранения новый скрипт сразу доступен через npm run dev. Если команда не находится, проверьте имя скрипта на опечатки — npm чувствителен к точному совпадению.
Почему npm start работает без run, а npm dev — нет
Команды start, test, stop и restart являются встроенными в npm и вызываются напрямую. Все пользовательские скрипты требуют префикса run: npm run dev, npm run build и так далее.
Типичные ошибки при редактировании
Большинство проблем с package.json сводится к нарушению синтаксиса JSON. Формат строгий: только двойные кавычки, никаких комментариев, никаких висячих запятых. Одиночные кавычки, привычные по JavaScript, здесь недопустимы.
Ещё одна частая ситуация — конфликт при слиянии веток в git. Если два разработчика меняли зависимости параллельно, после merge в файле могут остаться маркеры конфликта <<<<<<<. Их нужно удалить вручную, выбрав корректный вариант строк.
⚠️ Внимание: после ручного изменения списка зависимостей обязательно запустите npm install. Без этого папка node_modules и файл package-lock.json не синхронизируются с вашими правками, и проект может запускаться со старыми версиями пакетов.
Для быстрой проверки синтаксиса без установки пакетов можно воспользоваться валидатором JSON в редакторе или командой npm pkg get name — если файл повреждён, npm сразу сообщит об ошибке парсинга с указанием позиции.
Восстановление файла при повреждении
Если файл безвозвратно испорчен, а резервной копии нет, его можно пересоздать. Команда npm init запустит мастер создания нового package.json — ответьте на вопросы или нажимайте Enter для значений по умолчанию.
Зависимости придётся установить заново вручную. Если проект хранится в git, проще всего восстановить файл из истории командой git checkout -- package.json — она вернёт последнюю зафиксированную версию.
Часто задаваемые вопросы
Можно ли редактировать package.json во время работы приложения?
Технически да, файл просто сохраняется на диске. Но изменения вступят в силу только после перезапуска приложения и выполнения npm install, если менялись зависимости.
Чем package.json отличается от package-lock.json?
Первый описывает желаемые зависимости и редактируется разработчиком. Второй генерируется автоматически и фиксирует точные версии всего дерева пакетов — его не трогают руками.
Почему npm выдаёт ошибку JSON.parse после моих правок?
Проверьте файл на типичные ошибки: лишняя запятая в конце списка, одинарные кавычки вместо двойных, незакрытая скобка или остатки маркеров git-конфликта.
Как добавить комментарий в package.json?
Стандартный JSON комментарии не поддерживает. Как обходной вариант иногда добавляют отдельное поле вроде "comment", но это скорее исключение — описание проекта лучше держать в поле description и файле README.
Можно ли изменить package.json без установленного Node.js?
Да, это обычный текстовый файл — откройте его любым редактором и сохраните. Но для применения изменений (установки зависимостей, проверки синтаксиса) Node.js и npm всё же понадобятся.