представьте, что у вас есть две зависимости:
package.json
{
"dependencies": {
"a": "1.0",
"b": "2.0"
}
}
Где выглядит дерево зависимостей:
|[email protected]
|[email protected]
В этом случае не было бы никакой разницы между их обоими как globalDependencies
или dependencies
. Однако возникает проблема, когда они имеют свои собственные зависимости. Представьте, что ваше дерево зависимостей выглядит так:
|[email protected]
| |[email protected]
| |[email protected]
|[email protected]
Когда вы устанавливаете [email protected]
как глобальную зависимость, она удаляет ссылки на [email protected]
и [email protected]
и попросит вас установить эти зависимости как глобальные. Это требует, чтобы вы сгладили дерево зависимостей, чтобы:
|[email protected]
|[email protected]
|[email protected]
|[email protected]
Это прекрасно работает для [email protected]
, но теперь вам нужны две версии b
. [email protected]
зависит от [email protected]
, но ваше приложение зависит от [email protected]
. Какую версию вы устанавливаете? Если вы установите [email protected]
, определения типов для [email protected]
могут сломаться. Если вы установите [email protected]
, ваши типы приложений могут сломаться. Это проблема, с которой сталкивается globalDependencies
.
Когда вы создаете определение типа с помощью типов и устанавливаете его как обычную зависимость, оно упаковывает подзависимости, не раскрывая их вашему приложению. Это означает, что если вы установите [email protected]
как обычную зависимость, она не будет использовать определения верхнего уровня [email protected]
. Вместо этого он будет использовать свой собственный [email protected]
, который не загрязняет ваше глобальное пространство имен. По сути, обычные зависимости сохраняют древовидную структуру зависимостей и являются предпочтительным подходом к определениям. Проблема в том, что не во всех библиотеках определения типов построены как обычные зависимости. В идеале, по мере того, как люди будут писать больше определений, глобальные переменные естественным образом исчезнут.
person
chrisbajorin
schedule
23.06.2016