为什么反应应该通常是一个prod依赖,而不是dev依赖

时间:2018-02-19 08:12:48

标签: node.js reactjs dependencies

很抱歉,如果我错过了一些明显的事情,但我似乎无法理解为什么反应(或反应)应该是一个依赖,而不是大多数项目的开发依赖。 通常src是用es6编写的,并存储在/ src或/ client中,当有人想要为prod构建项目时,他将创建/ build或/ dist最终的bundle.js所在的位置(使用webpack等) 。从那里(在prod)它只是一个服务于常规js(捆绑)和html文件的Web服务器。

我想念一下吗?

我不明白为什么我要对产品做出反应(除非当然要去SSR)..

非常感谢!

3 个答案:

答案 0 :(得分:2)

dependencies只需要rundevDependencies只需要develop,例如:单元测试,Coffeescript到Javascript的转换,缩小,......

React是一个依赖项,因为它包含在最终版本中。

如果是React App,您的所有JSX都会转换为类似React.createElement的语法,因此您也需要在运行时使用您的App。像setStatelifecyle functions这样的类似方法都在运行时执行。

事实上,react是一个暴露了一些方法和API来访问和操作DOM的库。

考虑这与jqueryexpress类似,您将其添加到生产版本中,因为它们是在运行时使用的。

创建反应应用程序时,仅用于创建包的babelwebpack等内容将是dev依赖项,因为一旦生成打包的包,就不需要在运行期间生成它申请时间

答案 1 :(得分:2)

如您所提到的,dependency是在src /或客户端/模块中导入的内容。您运行的代码取决于它,因此在生产包中是必需的。

如果它像Babel那样可能是一个devDependency,因为:

  1. 未在源代码中导入。
  2. 这是一个转换器,可以在编译时使用代码
  3. 但是React的情况并非如此。像setState或生命周期钩子这样的函数正在运行时执行,这意味着库必须在运行时出现。

    React很可能被列为对等依赖项,是一些popuar库。这是因为我们假设将要使用此库的所有项目都将安装React。比如考虑react-bootstrap的情况。它只能在react项目中运行,因此我们将react作为peer依赖项包括在内,减少了安装它的开销。

    如果您需要一个在编译时消失的框架,请查看Svelte

答案 2 :(得分:0)

我有同样的问题,发现this article很好地解释了这个问题。

总而言之,将响应依赖项放在什么位置都没有关系,因为Webpack会将它们捆绑到一个独立的文件中,并且无论哪种情况,代码都能正常运行。但是,将开发和生产依赖项分开可以为这些依赖项提供更好的与其他开发人员的沟通。