На основании этой статьи (и других вместе с комментариями в Интернете) рекомендуется "поднять каждую devDependency, чтобы они были доступны для каждого пакета". Причина в том, чтобы избежать выделения части жирным шрифтом:
Давайте рассмотрим пример, pkg1 и pkg2 определяют ESLint как devDependency, поэтому вы определили, что в двух пакетах дублирует определение и управление. Вы можете извлечь его из обоих и установить его как devDependency в корневом package.json. Таким образом, все проекты, которым он нужен, будут доступны.
Я понимаю, и именно так я настраивал этот конкретный проект.
Но теперь явозникли некоторые проблемы, потому что все инструменты установлены в корне, и двоичные файлы для этих инструментов не совсем доступны при запуске из определенной папки пакета. Как мне решить эту проблему?
Я обнаружил, что указание инструмента в виде devDependency
в файле пакета package.json
добавляет двоичный файл символьной ссылки для указанного инструмента в папку пакета node_modules/.bin
. Однако как избежать первоначальной проблемы с «дублированием определения и управления»?
Например:
root/package.json
"devDependencies": {
"eslint": "6.6.0"
}
Вариант 1)
root/packages/foo/package.json
"devDependencies": {
"eslint": "6.6.0"
}
Это создаст символическую ссылку, но у меня есть дубликаты зависимостей для управления.
Вариант 2)
root/packages/foo/package.json
"devDependencies": {
"eslint": "^6.6.0"
}
Это создаст символическую ссылку, но затем у меня будут дублированные зависимости для управления,хотя мне не нужно беспокоиться о версии, если мне не нужно обновить все пакеты до следующей основной версии.
Вариант 3)
root/packages/foo/package.json
"devDependencies": {
"eslint": "*"
}
Это создаст символическую ссылку, и нет дублирующихся зависимостей для управления.
Вариант 4)
???