npm:依赖关系vs devDependencies与捆绑的依赖关系

时间:2016-03-25 10:21:52

标签: npm dependencies package.json

使用搜索我已经找到了类似问题的一些很好的答案,但我仍然不确定我是否理解正确。

根据这些答案,我了解到dependencies是运行应用程序所必需的,而devDependencies仅在开发时需要(如单元测试)。

但是这个怎么样:我的应用程序依赖于jQuery,但在构建步骤期间(在devDependencies的帮助下),所有内容都捆绑在一个文件中。在这种情况下,我应该将jQuery列为dependency还是devDependency

为了让我的观点更清楚,请使用以下模块:

define(['jquery'], function($) {
  // use jQuery in this module
})

稍后,这个模块将被编译成像application.build.js这样的somehing,然后包含这个模块和jQuery依赖。

1 个答案:

答案 0 :(得分:3)

由于最终结果是相同的,这里似乎没有明确的规则,但我在这个问题上找到了几个讨论:

如果您正在构建应用程序

https://github.com/webpack/webpack/issues/520

  

由[ insert build tool / bundler ]构建的浏览器应用程序没有运行时节点依赖项,因此所有前端依赖项都应列为devDependencies。 dependencies vs devDependencies命名约定历来源于节点是服务器端包管理器(...)据我所知,在dependencies下列出前端依赖关系是无害的,但是这是错误的。

  

(...)作为每个人的一般建议,将所有内容移至devDependencies,直到dependencies下实际需要为止。

如果您正在构建库:

https://github.com/inuitcss/inuitcss/issues/225

  

在许多前端项目中,所有提供给浏览器的代码都已编译,没有运行时依赖项。这意味着没有dependencies,只有devDependencies - 所有依赖项都包含在开发期间完成的构建中。

     

有人也可能认为开发也需要依赖关系,所以可以列出所有dependencies的内容。

  

我认为我们有可选区别这一事实表明了使用它们的合理方式。 (对我而言)dependencies指定代表要使用的'最小可行'代码并指示什么是非必要的工作,这是有意义的。

  

在我看来,任何继续成为生产代码一部分的都是dependency

后记

就个人而言,我同意最后一句话。有意义的是dependencies告诉我们应用程序代码需要运行什么,以及devDependencies 开发人员需要构建/部署/无论什么应用程序/库。

但有一点需要注意的是,如果有人npm install你的图书馆将该套件用作他们自己的应用程序中的模块,他们将下载他们实际上并不需要的大量dependencies