в чем разница между ambientDependencies и обычными зависимостями в типизации

В следующем файле typings.json в чем разница между ambientDependencies (или globalDependencies) и обычными зависимостями:

{
  "ambientDependencies": {
    "es6-shim": "registry:dt/es6-shim#0.31.2+20160317120654",
    "jasmine": "registry:dt/jasmine#2.2.0+20160412134438",
    "jquery": "registry:dt/jquery#1.10.0+20160417213236"
  },

"зависимости": {}, ‹--- что это делает?

}

typings install <something> --save сохранит в зависимости, но что это значит?


person raneshu    schedule 23.06.2016    source источник


Ответы (1)


представьте, что у вас есть две зависимости:

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
comment
Простое краткое объяснение. Ваше здоровье - person Belfield; 09.03.2017