需要验证我对开发依赖项和依赖项的理解

Posted

技术标签:

【中文标题】需要验证我对开发依赖项和依赖项的理解【英文标题】:Need validation of my understanding of dev-dependencies and dependencies 【发布时间】:2020-02-11 10:03:33 【问题描述】:

我是一名初学者(学习 Web 开发大约需要 15 天),我目前正在学习 React,如果这听起来太琐碎,我很抱歉。

我试图了解 devDependencies 和 dependencies 之间的区别以及它们的正确用法。

我试图从文档和 *** 问题中找出答案,但我不能 100% 确定我是否有这个权利。因此,请回顾一下我目前的理解,并让我知道到目前为止我是否有此权利。

定义

依赖项:只有最终将被生产构建使用的包。这些将在最终的 package.json 文件中。

devDepndencies:简化我的开发工作并且最终不会被产品/应用程序使用的包。这些不会包含在最终构建的 package.json 文件夹中。

正确使用的重要性

从依赖项中正确排除 devDependencies 可以使应用程序更轻量级,这一点非常重要。同时,错误地排除所需的依赖项会导致我的应用程序崩溃。

实例

在我的教程中创建的 package.json 文件中,我有以下包,我提到了根据我目前的理解包应该具有的依赖类型。如果我在某个地方出错,请告诉我:

babel-cli : devDependency babel-core: devDependency babel-loader: devDependency babel-plugin-transform-class-properties: devDependency babel-preset-env: devDependency babel-preset-react: devDependency css-loader:devDependency node-sass:依赖 反应:依赖 react-dom:依赖 react-modal:依赖 sass-loader:依赖 样式加载器:依赖项 验证器:依赖项 webpack:开发依赖 webpack-dev-server: 开发依赖

如果我有任何错误,请告诉我

【问题讨论】:

这更像是运行时与开发时的区别。我认为其中大部分都是 devDependencies,因为您不需要在为您的应用程序提供服务时运行node-sass。 Webpack 会将dist 文件夹放在一起,您可以将其交给您需要的任何静态服务器。该静态服务器可能是一个依赖项。但是,我不会因为这种区别而陷入困境。您正在过早地进行优化,而不仅仅是开发。 我写了一个关于另一个对这里的区别感到困惑的问题的答案:Can you import a devDependency in your code? @zero298:感谢您的回复。我目前没有开发,只是学习概念。但我很感激您担心我可能会想太多,并且可能会在我深入研究时弄清楚这一点。 【参考方案1】:

devDependencies 是仅在您的网络应用程序主动开发期间需要的模块依赖项。例如,当您在 Web 应用程序中编写新功能时。大量的devDependencies 将使您的开发更容易,并且可以提供诸如 linting、bundling、transpiling 等功能......

相比之下,常规的dependencies在您的Web 应用程序运行时需要的模块。 IE。当其他用户想要与您的 Web 应用程序交互时,这些是您的 Web 应用程序正常工作所必需的依赖项。

注意:我所说的模块是指您正在利用的库中的底层代码。更完整的定义可以在here 找到。

您对包含比生产包所需的更多代码的担忧是有道理的,我建议您阅读有关Cost of javascript 的更多信息。然而,一开始我会鼓励人们首先获得一个工作代码库,并随着你技能的增长不断迭代和改进你的代码。不断提高性能。

最后,devdependencies 的一些常见类型包括用于测试代码库、构建、缩小、捆绑、转译和检查代码的库。

希望对您有所帮助!

【讨论】:

谢谢。我会检查这些。 如果它回答了您的问题,请考虑接受我的回答【参考方案2】:

devDependencies 是仅在您的开发环境中需要或构建 UI 所需的依赖项,例如 nodemon 是一个 dev 依赖项,因为您永远不会使用它来运行您的应用程序。

将 devDependencies 从正常依赖项中分离出来的好处之一是在构建最终层时 Docker 映像的大小更小。

例如,在我的 dockerfile 中,我将运行一组测试并构建需要 npm 安装的 UI,但是在构建将实际运行的最终映像时,我将简单地通过 docker 复制构建的 UI 文件然后我将运行 npm install --production,这样我的 devDependencies 就不会安装和膨胀我的 node_modules 文件夹。

希望这会有所帮助。

【讨论】:

以上是关于需要验证我对开发依赖项和依赖项的理解的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Maven 中找出隐藏的依赖项和插件版本?

如何捆绑包含依赖项的 Python 应用程序?

maven pom验证依赖失败

如何使唯一数组的自定义验证规则依赖于其他字段 laravel

Vue.js UI 中的插件和依赖项有啥区别?

用于依赖项的 Gradle 私有存储库