angular CLI产品构建如何管理嵌套的npm依赖项?产品构建与开发构建

时间:2019-04-16 13:21:45

标签: angular npm webpack package.json ng-build

我目前正在尝试弄清楚angular CLI产品构建如何处理npm依赖性。我正在使用角度CLI 1.4.5和npm 5.6.0。

总结测试用例: 假设我的package.json中有两个依赖项:libA和libB,但是libB在自己的package.json中具有libA作为依赖项。

我的应用程序的package.json看起来像这样 ...“依赖项”:{    “ libA”:“ 2.0”,    “ libB”:“ 2.0” } ...

libB的package.json看起来像这样: ...“依赖项”:{    “ libA”:“ 1.0” } ...

在执行npm后,安装依赖关系树如下(libA安装在node_modules文件夹中的两个位置-在版本2.0的“顶层”中,以及在libB的版本1.0的nodeBmodules文件夹中):

  --libA@2.0
  --libB@2.0
     |
      --libA@1.0

好的,到目前为止一切都很好,我了解npm如何以及为什么这样做。 现在,在我的应用程序中,我使用来自libB的角度组件(我们称其为componentB),它本身使用来自libA的组件(我们称其为componentA)。

让我们说libA@2.0和libA@1.0之间的区别只是componentA的ts文件中的一行代码(我们可以用来区分两者,也许是在打印某些事件时使用console.log进行区分) “使用libA@1.0”或“使用libA@2.0”。

情况1:我使用“ ng build”构建项目 我在浏览器中测试我的componentB =>我得到“使用libA@1.0”控制台日志。这就是我的预期,对我来说,npm为libB中的组件安装libA@1.0即可使用。

案例2:我使用“ ng build --prod”构建项目 在这种情况下,当我在浏览器中测试我的componentB =>时,会收到“使用libA@2.0”控制台日志。 在vendor.bundle.js文件中,我看到了componentA的两个定义-我想这是预期的(每个libA版本中的一个)。但我还期望该捆绑包(以某种方式(不确定如何))将依赖项保留在npm依赖项树中(并获取“使用libA@1.0”控制台日志)。

有人知道它如何更详细地工作吗? libA@1.0和libA@2.0代码是否只是在vendor.bundle.js中抛出?您怎么知道将使用哪一个?

我还应该提到libA和libB是自定义的角度库。 LibA是“核心”库。 LibB是使用libA中的组件(通常是哑组件)构建的。

0 个答案:

没有答案