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

IT技术 reactjs create-react-app
2021-04-18 00:46:46

在创建一个新项目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.

我会说这些都是devDependenciescreate-react-app 把它们放在这里的原因吗?

2个回答

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

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

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

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

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

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

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

  • 消耗通过 npm i
  • 通过克隆项目开发

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

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

希望这可以帮助。!