pub dependencies和dev_dependencies有什么区别?(这是一个提问标题)

39

pubspec.yaml文件中dependenciesdev_dependencies有什么区别?看起来当我运行pub get时,dev_dependencies没有被下载。

3个回答

22

dev_dependencies是一种依赖项,它们不可用于生成应用程序的代码,而只能用于测试、示例、工具或添加可执行工具(例如用于代码生成)到您的项目中。

当您发布到 pub.dev 时,项目中任何依赖项(dependenciesdev_dependencies)的 dev_dependencies 都将被忽略。

请参阅 https://dart.dev/tools/pub/pubspec


24
个人看法,你的解释不是非常清晰。这里有一个很好的解释:https://www.dartlang.org/tools/pub/dependencies#dev-dependencies - nbro

17

依赖有两种类型,一种是常规依赖,另一种是开发依赖。

依赖关系:

常规依赖列在dependencies下-这些是任何使用你的包的人也需要的包。

dev_dependencies:

仅在包本身的开发阶段需要的依赖包列在dev_dependencies下。


如果你的包(比如A)依赖于另一个包(比如B)(它具有dev_dependencies),那么你的包A将忽略包B的dev_dependencies。但是,你的包A依赖于包B的dependencies中列出的包。


1
我该如何决定将哪个依赖项放置在dev-dependencies下,哪个放置在dependency下。假设我必须包含image_picker的依赖项,现在应该放在哪里,为什么? - M.ArslanKhan

2

Pub支持两种依赖关系:dependenciesdev dependencies

Dev dependencies与常规依赖关系不同,因为忽略了您所依赖的软件包的开发依赖关系。 以下是一个例子:

假设transmogrify软件包在其测试中使用test软件包,并且仅在其测试中使用。如果有人只想使用transmogrify-导入其库-它实际上不需要test。在这种情况下,它将test指定为开发依赖项。.
它的pubspec将类似于:

dev_dependencies:
  test: '>=0.5.0 <0.12.0'

Pub会获取您的包所依赖的每个软件包,以及这些软件包所依赖的一切,递归地。它还会获取您的包的开发依赖项,但会忽略任何依赖包的开发依赖项。Pub仅获取您的包的开发依赖项。因此,当您的包依赖于transmogrify时,它将获取transmogrify但不获取test。

决定使用常规依赖项还是开发依赖项的规则很简单:如果依赖项是从lib或bin目录中的某个内容导入的,则需要是常规依赖项。如果它只是从测试、示例等导入,则可以且应该是开发依赖项。

使用开发依赖项可以使依赖关系图更小。这使得pub运行更快,并使找到满足所有约束条件的软件包版本组合更容易。

在这里,您可以了解更多关于依赖关系的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接