【问题标题】:Can you import a `devDependency` in your code?您可以在代码中导入“devDependency”吗?
【发布时间】:2019-07-30 19:32:00
【问题描述】:

Mobx DevTool's README 引导您将其安装为开发依赖项,然后将其导入您的代码中。这对我来说似乎是个问题,因为 this SO answer 解释的 devDependencies 是:

... 用于构建过程,帮助您的工具 管理最终代码将如何结束,第三方测试模块,(例如。 webpack 的东西)

如果这是真的,那么你不应该将 devDependency 导入你的代码是正确的推论吗?

【问题讨论】:

  • 你要导入什么样的代码?此代码是用于仅在开发环境中运行的工具,还是您的模块/库/工具的使用者也将使用此代码?
  • 它会嵌入到应用程序中(它会在您的网页顶部覆盖一些按钮),并供开发人员用于调试。但它并非仅用于开发环境。
  • But it's not intended to be used only in dev environment 然后让它成为一个依赖而不是一个devDependency。如果您在发货之前将其全部卷起,从技术上讲并不重要。但是最好了解什么是 devDependencies(用于构建/测试代码)以及什么是依赖项(运行的生产代码需要)。
  • 糟糕,对不起!我正赶着去开会,但我错误地匆匆忙忙地写了一个不在那里。所以不允许我编辑我的评论,所以我想说的是:But it's intended to be used only in dev environment 这意味着它可以成为 devDependency?如果这是真的,既然我们在代码中有一个引用此依赖项的 import 语句,那么在创建生产构建时会发生什么?它会破坏生产中的代码吗?

标签: javascript npm package.json


【解决方案1】:

这取决于将如何使用导入依赖项的代码。如果它只在开发环境中使用,那么是的,它应该是 devDependency 并且代码可以使用它。

如果使用它的代码将被您的包/模块/库的消费者使用,那么它是一个直接依赖项,应该这样注释。

这是您如何看待消耗依赖项的源文件的意图。如果我使用npm install your-cool-package 安装,我不希望也不应该需要安装devDependencies,因为我可能不会从源代码、基准测试或测试构建您的模块。我只是去消费它。

如果我需要依赖项来使用您的模块,那么它不是devDependencies,它只是一个直接向上的dependencies(或者可能是peerDependencies)。


问问自己这个问题:当我使用你的模块时,为了让它发挥作用,是否需要依赖项才能让它发挥作用?如果是这样,那就是依赖。如果不是,它是一个开发依赖项。

如果您为某物创作插件,则取决于它所插入的东西。如果您编写了一个帮助人们开发东西的插件,该插件仍然取决于它所插入的内容,但是安装您的插件的人会认为您的插件是开发依赖项,因为他们在不开发时不需要它。但是,您的插件仍然直接依赖于它所插入的东西。

听起来您正在为模块 (Mobx) 编写插件(我们称之为 cool-plugin)。我不使用 Mobx,但它听起来像是一个开发工具。因为听起来 cool-plugin 需要 Mobx 才能做任何事情 Mobx依赖 cool-plugin,但消费者会认为 cool-plugin 是他们自己假设的 consumer-moduledevDependencies,因为他们没有在生产中不需要它。

因此,您应该考虑将 Mobx 视为dependencies,因为没有它,您的模块将毫无意义。


有一种情况是,您实际上应该将其视为 peerDependencies,因为 consumer-module 可能不希望您安装自己的 Mobx 版本> 而是希望您与他们应该已经在使用的接口进行交互。

【讨论】:

  • 所以在我的上下文中,我可以让它成为一个 devDependency 权利(因为我只打算在开发环境中使用它)?如果这是真的,既然我们在代码中有一个引用此依赖项的 import 语句,那么在创建生产构建时会发生什么?它会破坏生产中的代码吗?
  • @craftsman 查看我的编辑,如果我的理解正确,我认为 Mobx 应该是 dependency 而不是 devDependency。
猜你喜欢
  • 2016-07-26
  • 2018-07-26
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多