【问题标题】:what's the difference between ambientDependencies and regular dependecies in typings环境依赖和类型中的常规依赖有什么区别
【发布时间】:2016-10-25 23:02:37
【问题描述】:

在下面的 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": { },

}

typings install <something> --save 将保存到依赖项,但这意味着什么?

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    假设您有两个依赖项:

    package.json

    {
        "dependencies": {
            "a": "1.0",
            "b": "2.0"
        }
    }
    

    依赖树的样子:

    |-a@1.0
    |-b@2.0
    

    在这种情况下,将它们都设为globalDependenciesdependencies 没有区别。 但是,当它们有自己的依赖项时,就会出现问题。想象一下你的依赖树是这样的:

    |-a@1.0
    |  |-b@1.0
    |  |-c@1.0
    |-b@2.0
    

    当您将a@1.0 安装为全局依赖项时,它将删除对b@1.0c@1.0 的引用,并要求您将这些依赖项安装为全局项。它要求您将依赖关系树展平为:

    |-a@1.0
    |-b@1.0
    |-b@2.0
    |-c@1.0
    

    这适用于c@1.0,但现在您需要两个版本的ba@1.0 依赖于b@1.0,但你的应用依赖于b@2.0。您安装哪种类型的版本?如果您安装b@2.0a@1.0 的类型定义可能会中断。如果您安装 b@1.0,您的应用类型可能会中断。这是globalDependencies 面临的问题。

    当您使用类型化构建类型定义并将其安装为常规依赖项时,它会包装子依赖项而不将它们暴露给您的应用程序。这意味着如果您将a@1.0 安装为常规依赖项,它将不会使用顶级b@2.0 定义。相反,它将使用自己的私有b@1.0,不会污染您的全局命名空间。实际上,常规依赖项保留了您的依赖项树结构,它们是处理定义的首选方式。问题是并非所有库都将类型定义构建为常规依赖项。理想情况下,随着人们编写的定义越来越多,全局变量自然会被淘汰。

    【讨论】:

    • 简单明了的解释。干杯
    猜你喜欢
    • 2014-12-31
    • 2014-12-09
    • 2015-11-11
    • 1970-01-01
    • 2015-11-13
    • 2018-10-20
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多