create-react-app 在依赖项部分安装 devDepencies

Posted

技术标签:

【中文标题】create-react-app 在依赖项部分安装 devDepencies【英文标题】:create-react-app install devDepencies in dependencies section 【发布时间】:2017-12-05 17:05:18 【问题描述】:

使用create-react-app 创建一个新项目并运行yarn eject

我的 package.json 的依赖部分如下所示:

  "dependencies": 
    "autoprefixer": "7.1.1",
    "babel-core": "6.25.0",
    "babel-eslint": "7.2.3",
    "babel-jest": "20.0.3",
    "babel-loader": "7.0.0",
    "babel-preset-react-app": "^3.0.1",
    "babel-runtime": "6.23.0",
    etc.

我会说这些都是devDependencies 为什么 create-react-app 把它们放在这里?

【问题讨论】:

【参考方案1】:

这是对最新版本之一的有意更改。

对于生成静态包的前端应用程序来说,区别是相当随意的。从技术上讲,您不需要 任何 服务器上的这些依赖项,甚至不需要运行时依赖项。因此,按照这种逻辑,即使 react 也可能被视为开发依赖项。

我们曾经尝试将它们分开,但如上所述,它一开始并不是真正一致的。这种区别对于没有 Node 运行时的应用程序有用,没有技术原因。此外,它曾经对一些没有安装开发依赖项的 Heroku 部署造成问题(因此无法在服务器上构建项目或在部署之前对其进行测试)。

最后,我们只是将所有内容放入依赖项中。如果您不同意,您可以随时按照您认为合理的方式重新排列package.json

【讨论】:

但这是否意味着所有的 devDependencies 最终都在生产构建中并与应用程序代码一起部署?增加包装尺寸 > 这种区别对于没有 Node 运行时的应用程序有用没有技术原因。 devDeps 和 deps 在两个完全独立的环境中运行,保持两者隔离可以通信/记录哪些 deps 在野外运行,哪些在 CI/可信环境中运行。这对于在出现安全漏洞时进行评估非常有帮助。 抱歉我是个菜鸟 - 但在这种情况下,构建步骤如何知道不将 Jest(等)发送到最终可分发文件中? 生成产品包时的构建系统将构建与主文件一起使用的依赖关系图。只要图中某处没有直接导入它,它就不应包含 jest 或其他构建工具。 嘿@soumitra,但在@类型的情况下,我们的代码中存在用于输入的导入。那么,它们是否仍然从生产包中删除?这是为客户端(浏览器)服务的吗?【参考方案2】:

如果您正在构建的应用程序是一个库,那么这些都是开发依赖项,您希望发布其他人使用。

基本上我的理解是这样的,如果你有一个可以以两种方式使用的模块:

通过npm i消费 通过克隆项目开发

在这种情况下,将它们放在开发依赖项中是有意义的。

在您的情况下,人们将克隆您的项目进行开发。并通过托管使用它。

希望这会有所帮助。!

【讨论】:

以上是关于create-react-app 在依赖项部分安装 devDepencies的主要内容,如果未能解决你的问题,请参考以下文章

将 Sass (.scss) 添加到弹出的 create-react-app 配置

使用 create-react-app 脚手架搭建 react 项目,释放配置文件且注入 less 依赖

Apache Ivy:解决嵌入在安装程序中的依赖项

创建 .deb 安装程序时如何安装依赖项?

如何在操场上安装 3rd 方依赖项(如 Alamofire)

Yarn 包管理器:从私有 Bitbucket 存储库安装依赖项