在以下 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"
},
"dependencies": { }, <--- what does this do?
}
typings install <something> --save
将保存到依赖项,但这是什么意思?
最佳答案
假设您有两个依赖项:
package.json
{
"dependencies": {
"a": "1.0",
"b": "2.0"
}
}
依赖树的样子:
|-a@1.0
|-b@2.0
在这种情况下,将它们都设置为 globalDependencies
或 dependencies
没有区别。
但是,当它们有自己的依赖项时,就会出现问题。想象一下您的依赖关系树如下所示:
|-a@1.0
| |-b@1.0
| |-c@1.0
|-b@2.0
当您将 a@1.0
作为全局依赖安装时,它将去除对 b@1.0
和 c@1.0
的引用,并将要求您将这些依赖项安装为全局变量。它要求您将依赖关系树展平为:
|-a@1.0
|-b@1.0
|-b@2.0
|-c@1.0
这适用于 c@1.0
,但现在您需要两个版本的 b
。 a@1.0
依赖于 b@1.0
,但您的应用依赖于 b@2.0
。您安装哪种类型的版本?如果安装 b@2.0
,a@1.0
的类型定义可能会中断。如果您安装 b@1.0
,您的应用类型可能会崩溃。这就是 globalDependencies
面临的问题。
当您使用 typings 构建类型定义并将其作为常规依赖项安装时,它会包装子依赖项而不会将它们暴露给您的应用程序。这意味着如果您将 a@1.0
安装为常规依赖项,它将不会使用顶级 b@2.0
定义。它将改为使用自己的私有(private) b@1.0
,不会污染您的全局命名空间。实际上,常规依赖项会保留您的依赖项树结构,并且它们是处理定义的首选方式。问题是并非所有库都将类型定义构建为常规依赖项。理想情况下,随着人们编写更多定义,全局变量自然会被淘汰。
关于typescript - 打字中的环境依赖性和常规依赖性之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37994539/