【问题标题】:bower - when should I use dependency vs. devDependency when writing a library?bower - 在编写库时我应该何时使用依赖项与 devDependency?
【发布时间】:2015-10-13 10:35:21
【问题描述】:

在我不应该的事情上出现依赖冲突,这对我来说似乎很奇怪。让我们以角度和角度日期选择器为例。

当我添加对 angular-datepicker 的依赖项时,我会遇到另一个 Angular 版本的冲突。

在 npm 中,已解析的依赖项在运行时使用。因此,如果 angular-datepicker 要在 npm 中运行,它会在运行时使用自己的 angular 版本。这是有道理的。

但是在 bower 中情况并非如此,因为运行时版本是共享的,并且 angular-datepicker 的 angular 版本仅用于开发,而不用于运行时。

我添加的库越多,就越难“满足”所有。

在我看来,所有库都应该将 angular 声明为 devDependency 而不是依赖项——因为他们希望使用它们的项目直接依赖于 angular 而不是使用它们的 angular。

但是,我应该什么时候使用依赖项?

请有人向我澄清这个问题。

【问题讨论】:

  • 一个问题是你如何与你的 angular-datepicker bower.json 中的依赖项发生冲突?这没有任何意义,因为为什么您的应用程序上的bower install 甚至会查看您的应用程序依赖项之一中的bower.json?我可以看到的所有 angular-datepicker 包都依赖于 Angular……但它们不会在您的应用级别被 bower install 调用。
  • @YPCrumble 你在安装凉亭时从来没有遇到过冲突吗?也许我的例子不正确(即使我检查过)。这个问题不是针对库的,而是一般想知道这种依赖检查的目的是什么,因为它并没有真正在运行时使用

标签: bower


【解决方案1】:

您应该使用devDependency 作为开发人员构建/测试/编译/提供应用程序所需的应用程序部分。诸如您的测试套件或您的 gulp/其他任务运行器之类的东西。

您应该将dependency 用于客户端运行已编译应用程序所需的任何内容。在您的情况下,Angular 和 Angular 日期选择器都是依赖项。

一个主要区别是,如果您运行 bower install -p(用于生产),您只会安装到 bower_components 目录并忽略 devDependencies。

听起来正在发生的事情是您的应用正在运行一个版本的 Angular,而您的 Angular-datepicker 插件正在运行另一个版本的 Angular。一个好的解决方案是将所有内容更新到最新的 Angular 版本,或者如果这不可能,请选择与您正在运行的 Angular 版本兼容的 angular-datepicker 插件版本。

【讨论】:

  • 但是,如果我是一个图书馆并且有一个项目在使用我,我真的不希望该项目使用“我的”角度依赖。他们很可能有自己的。那么我依赖的目的是什么?
  • @guymograbi 在这种情况下,我认为更多的是允许开发人员和第三方包准确了解库在运行时的依赖关系。我看到 Bower 和 NPM 之间的主要区别是 bower 不会递归安装依赖项,所以你是对的,在这种情况下,依赖项会被忽略。
  • 所以你的意思是它只是为了记录?我仍然没有看到应该在可重用库中使用“依赖项”的场景。据我现在的理解,可重用库应该始终使用 devDependencies,并且使用它们的人应该知道它们的依赖关系(来自文档或其他东西)并随身携带。就像使用 CSS 一样。有没有办法告诉鲍尔忽略它们?
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2013-10-20
  • 2020-07-08
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多