Зависимости
package.json - это место, где мне всегда нужно лезть в доку, так как я критически не могу угадать по названию что делает тот или иной ключ.
А так как я пишу бандлер для либ, то это бесит просто донельзя.
Из последнего: мне нужно описать список пакетов, с которыми может работать моя либа. Т.е. эти пакеты могут существовать, а могут и не существовать. Я справедливо предположил, что нужно использовать "optionalDependencies". Но после релиза ко мне начали приходить пользователи со словами: "а почему у меня устанавливается бабель и тс, хотя я их не ставлю?".
Оказалось, что optDeps - это как deps(т.е. нужно ставить), но установка зависимостей не падает, если поставить зависимость не удаётся. Да, об этом написано в документации. Но кто её читает перед использованием?
И да, это весьма удобно в некоторых редких ситуациях. К примеру, таким макаром Vite ставит нативные зависимости: перечисляются зависимости для всех платформ, и поставятся только те, которые подходят для текущей машины. Остальное просто упадёт и проигнорируется.
В моём же случае понадобилось описать мои зависимости в peerDeps и проставить флаги в peerDepsMeta.
{
"peerDependencies": {
"react": "^17.0.0",
},
"peerDependenciesMeta": {
"react": {
"optional": true
},
}
}
Хорошо, конечно что есть такая возможность, но то что это делается не так очевидно и требует в 2 раза больше строк - бесит. Хотя этот кейс на порядки более частый чем optDeps.