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 依赖