package.json и npm init
package.json — файл-паспорт проекта. В нём записаны название, версия, команды для запуска и список библиотек, от которых зависит проект. Его читают npm, Node.js и редакторы кода. Почти любой проект на Node.js начинается с создания этого файла.
Создание
Файл создаётся командой npm init в корне проекта, то есть в папке blog:
npm init -yБез флага -y npm задаст несколько вопросов (название, версия, описание), с ним — подставит значения по умолчанию. В папке появится файл blog/package.json.
Включаем ES-модули
Курс пишет код с import и export. Чтобы Node.js воспринимал файлы .js как ES-модули, в package.json нужно поле "type": "module". Его удобно задать командой:
npm pkg set type=moduleКоманда npm pkg set меняет поле в package.json, не открывая редактор.
Что внутри
После этих двух команд файл выглядит примерно так:
{
"name": "blog",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}Пока вам важны три поля, остальные можно оставить как есть.
| Поле | Зачем |
|---|---|
name | Название проекта: строчные буквы, без пробелов |
type | module — файлы .js являются ES-модулями |
scripts | Команды проекта, их запускают через npm run |
Позже, при установке библиотек, npm сам добавит поля dependencies и devDependencies — о них отдельный урок.
Проверка
Создайте файл app.js и выведите название проекта, прочитав package.json как JSON-модуль:
// app.js
import pkg from './package.json' with { type: 'json' };
console.log(pkg.name, pkg.version);Команда node app.js выведет blog 1.0.0. Запись with { type: 'json' } сообщает Node.js, что подключается не код, а JSON.
Частая ошибка
package.json — это строгий JSON, а не объект JavaScript. Комментарии, одинарные кавычки и запятая после последнего элемента в нём запрещены:
{
"name": "blog",
"type": "module"
}Если оставить лишнюю запятую, npm и Node.js откажутся читать файл с ошибкой JSON.parse или EJSONPARSE. Проверяйте файл после ручной правки или меняйте поля командой npm pkg set.