ran*_*shu 5 typescript typescript-typings
在下面的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"
},
Run Code Online (Sandbox Code Playgroud)
"依赖":{},<---这是做什么的?
}
Run Code Online (Sandbox Code Playgroud)
typings install <something> --save 将保存为依赖项,但这意味着什么?
想象你有两个依赖:
的package.json
{
"dependencies": {
"a": "1.0",
"b": "2.0"
}
}
Run Code Online (Sandbox Code Playgroud)
依赖树的位置如下:
|-a@1.0
|-b@2.0
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将它们两者都作为globalDependencies或没有区别dependencies.但是,当它们有自己的依赖项时会出现问题.想象一下你的依赖树看起来像这样:
|-a@1.0
| |-b@1.0
| |-c@1.0
|-b@2.0
Run Code Online (Sandbox Code Playgroud)
当您a@1.0作为全局依赖项安装时,它将剥离对b@1.0和的引用c@1.0,并将要求您将这些依赖项安装为全局变量.它要求您将依赖关系树展平为:
|-a@1.0
|-b@1.0
|-b@2.0
|-c@1.0
Run Code Online (Sandbox Code Playgroud)
这适用于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定义.它将使用自己的私有b@1.0,不会污染您的全局命名空间.实际上,常规依赖关系保留了依赖关系树结构,它们是接近定义的首选方式.问题是并非所有库都将类型定义构建为常规依赖项.理想情况下,随着人们写出更多定义,全局变量将自然被逐步淘汰.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |